Android 5.0 版中的 Dialog 不支持切换控制
Switch control is not working on Dialog in Android version 5.0
我在我的申请中使用了以下 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" />
在上面的 switch
中,当 switch
分别打开和关闭时,我使用 toggle_button_color.xml
将拇指颜色更改为绿色和红色。
<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>
如果我将此 switch
添加到 activity 布局,然后它的工作效果如下图所示。
但是,如果我使用 m_dialog.setContentView(R.layout.mylayout);
在 Dialog
上添加此 switch
,则切换如下所示。
请注意,这里 mylayout.xml
是一个 layout
文件,我在其中添加了 switch
.
对于 android 低于 5.0 lollipop switch
的版本可以正常工作。请注意,由于某些原因,我在我的应用程序中使用了 Theme.Holo.Light
,所以我不能使用 SwitchCompat
.
我知道这里有人问过类似的问题Switch crashes when clicked on Android 5.0。
这里也有报道https://code.google.com/p/android-developer-preview/issues/detail?id=1704。
我还尝试了上面 link 中提到的解决方法,为拇指和轨道添加可绘制图像,但我不明白为什么相同的开关在 activity layout
上工作但在 [=19= 上不工作].
有人可以帮我解决这个问题吗?
如果没有看到您的 Dialog
实例化代码,我无法确定(如果可以请添加),但听起来 Theme
用于您的 Activity
以及用于您的 Dialog
的主题。您可能想尝试使用 public Dialog (Context context, int theme)
constructor.
显式指定 Dialog
的 Theme
谢谢大家的回复,不过我自己解决了。早些时候我使用 Dialog
class 实现对话框,这导致了问题。
Dialog mDialog= new Dialog(getActivity(),android.R.style.Theme_Dialog);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.mylayout);
我什至尝试更改 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;
}
}
然后从我的 Activity
class 调用这个 Dialog
如下。
MyDialog mDialog = new MyDialog();
mDialog .show(getFragmentManager(), "Hello");
我在我的申请中使用了以下 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" />
在上面的 switch
中,当 switch
分别打开和关闭时,我使用 toggle_button_color.xml
将拇指颜色更改为绿色和红色。
<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>
如果我将此 switch
添加到 activity 布局,然后它的工作效果如下图所示。
但是,如果我使用 m_dialog.setContentView(R.layout.mylayout);
在 Dialog
上添加此 switch
,则切换如下所示。
请注意,这里 mylayout.xml
是一个 layout
文件,我在其中添加了 switch
.
对于 android 低于 5.0 lollipop switch
的版本可以正常工作。请注意,由于某些原因,我在我的应用程序中使用了 Theme.Holo.Light
,所以我不能使用 SwitchCompat
.
我知道这里有人问过类似的问题Switch crashes when clicked on Android 5.0。
这里也有报道https://code.google.com/p/android-developer-preview/issues/detail?id=1704。
我还尝试了上面 link 中提到的解决方法,为拇指和轨道添加可绘制图像,但我不明白为什么相同的开关在 activity layout
上工作但在 [=19= 上不工作].
有人可以帮我解决这个问题吗?
如果没有看到您的 Dialog
实例化代码,我无法确定(如果可以请添加),但听起来 Theme
用于您的 Activity
以及用于您的 Dialog
的主题。您可能想尝试使用 public Dialog (Context context, int theme)
constructor.
Dialog
的 Theme
谢谢大家的回复,不过我自己解决了。早些时候我使用 Dialog
class 实现对话框,这导致了问题。
Dialog mDialog= new Dialog(getActivity(),android.R.style.Theme_Dialog);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.mylayout);
我什至尝试更改 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;
}
}
然后从我的 Activity
class 调用这个 Dialog
如下。
MyDialog mDialog = new MyDialog();
mDialog .show(getFragmentManager(), "Hello");