8

我在我的應用程序中使用了下面的switch開關控制在Android 5.0版的Dialog中不起作用

<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我使用toggle_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> 

如果我這個switch添加到活動佈局,然後它完美地工作呢如下圖像。 enter image description hereenter image description here

但如果我使用m_dialog.setContentView(R.layout.mylayout);然後切換看起來像下面Dialog添加此switch。 請注意,這裏的mylayout.xml是一個layout文件,其中我添加了switch。因爲我想

enter image description here

對於低於5.0棒棒糖switch Android版本是工作的罰款。請注意,由於某些原因,我在我的應用程序中使用了Theme.Holo.Light,因此我無法使用SwitchCompat

我知道在這裏也有類似的問題Switch crashes when clicked on Android 5.0

而且這裏也有報道https://code.google.com/p/android-developer-preview/issues/detail?id=1704。 我也嘗試了上面提到的工作,在上面的鏈接中提到了爲thumb和track添加可繪製圖像,但我不明白爲什麼同一個開關在activity layout上工作,但在Dialog上沒有。

有誰能幫我解決這個問題嗎?

+0

我已經按照您的設置與可用的信息(即我不知道你是如何設置你的對話框),但我不能重新創建相同的結果 - 交換機適用於Android的Nexus 7 2013 5.1和Android 5.0仿真器。請提供更多細節。 – Kai

回答

1

謝謝大家的回覆,但我自己解決了。之前我使用Dialog類實現了對話,這導致了問題。

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 I類調用這個Dialog如下。

MyDialog mDialog = new MyDialog(); 
mDialog .show(getFragmentManager(), "Hello"); 
0

我不能肯定沒有看到你Dialog實例代碼(請補充說,如果可以的話),但它聽起來像有在Theme之間的差異被用於您的Activity和正在使用您的Dialog主題。您可能想要使用public Dialog (Context context, int theme)constructor明確指定DialogTheme

相關問題