我們平時寫的dialog(對話框),除了給用戶看的文字提示框可以點擊空白處消失外拓哟,很多情況下不應該讓其消失想许。比如需要讓用戶輸密碼才能進入操作界面的dialog,如果點擊空白處dialog消失断序,用戶就可以不輸密碼直接進入我們的應用流纹,這顯然影響了我們的功能。
一般情況下有兩種常規(guī)方式實現(xiàn)dialog:
1违诗、Android提供的Dialog控件
這種情況是最簡單的漱凝,Android本身自己就提供了相應的方法來實現(xiàn)。使用如下代碼即可:
dialog.setCanceledOnTouchOutside(false);
這樣點擊dialog框外的空白處dialog也不會消失诸迟。
2茸炒、用Activity使用Dialog樣式來實現(xiàn)
我們可以自定義Dialog樣式來實現(xiàn)不同的Dialog愕乎,但是很多情況下我習慣直接用activity來實現(xiàn)不同樣式的dialog,只要在AndroidManifest.xml文件中注冊theme為Dialog即可壁公,例如:
<activity
android:name="com.example.androidtest.MyDialogActivity"
android:theme="@android:style/Theme.Holo.Light.Dialog">
</activity>
在這種情況下實現(xiàn)點擊Dialog周圍空白處該Dialog不消失有兩種常用方法:
方法一:
Activity本身已經(jīng)提供了setFinishOnTouchOutside()方法來實現(xiàn)該功能感论,我們可以使用如下代碼:
MyDialogActivity.this.setFinishOnTouchOutside(false);
其中MyDialogActivity為用來實現(xiàn)Dialog樣式的Activity的名字
方法二:
自定義style,讓activity使用我們自定義的theme:
在res\values\styles.xml文件中定義自己的Dialog theme:
<resources>
……
<style name = "MyDialogTheme" parent = "@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
……
</resources>
在AndroidManifest.xml文件中使自己的activity使用該theme:
<activity
android:name="com.example.androidtest.MyDialogActivity"
android:theme="@style/MyDialogTheme" >
</activity>
即可實現(xiàn)點擊Dialog外空白處Dialog不消失