Android版本5.0中的Dialog无法使用开关控制

Poo*_*oja 8 android android-layout android-switch android-5.0-lollipop

switch在我的申请中使用了以下内容.

<Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text=""
        android:thumb="@drawable/toggle_button_color"
        android:textOff="@string/text_estimate"
        android:textOn="@string/text_accurate" 
        android:textColor="@color/white" />
Run Code Online (Sandbox Code Playgroud)

在上面switchtoggle_button_color.xml用来switch分别打开和关闭时将拇指颜色改为绿色和红色.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@color/red"  />
    <item android:state_checked="true" android:drawable="@color/green"  />   
</selector>
Run Code Online (Sandbox Code Playgroud)

如果我将其添加switch到活动布局,然后将其完美地放在下面的图像中. 在此输入图像描述 在此输入图像描述

但如果我switchDialog使用时加上这个,m_dialog.setContentView(R.layout.mylayout);那么切换如下所示.请注意,这mylayout.xmllayout我添加的文件switch.

在此输入图像描述

对于低于5.0的Android版本,棒棒糖switch正如我想的那样正常工作.请注意,由于某些原因我Theme.Holo.Light在我的应用程序中使用,所以我不能使用SwitchCompat.

我知道这里有一个类似的问题,点击Android 5.0时Switch崩溃了.

此处还会报告https://code.google.com/p/android-developer-preview/issues/detail?id=1704.我也试过上面链接中提到的工作为拇指和轨道添加可绘制的图像,但我不明白为什么同一个开关正在工作activity layout但没有Dialog.

有人可以帮我解决这个问题吗?

Poo*_*oja 1

谢谢大家的回复,不过我自己解决了。早些时候,我使用该类实现对话框Dialog,这导致了问题。

Dialog mDialog= new Dialog(getActivity(),android.R.style.Theme_Dialog);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.mylayout);
Run Code Online (Sandbox Code Playgroud)

我什至尝试过更改themes但没有帮助。

然后我尝试使用DialogFragment,这解决了问题。

public class MyDialog extends DialogFragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    View v = inflater.inflate(R.layout.mylayout, container, false);
    return v;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的课堂上,我如下Activity调用它。Dialog

MyDialog mDialog = new MyDialog();
mDialog .show(getFragmentManager(), "Hello");
Run Code Online (Sandbox Code Playgroud)