標籤:activity dialog activity觸摸外部消失
android內建的dialog樣式一般不滿足自己的要求,那就要求dialog自訂。
其實,activity也是可以以dialog的形式存在的,我們只需在資訊清單檔中設定其theme屬性即可:
<activity
android:name=".EditActivity"
android:theme="@android:style/Theme.Dialog"
>
</activity>
一般的activity形式的dialog,觸摸其外部都是會dismiss的,那麼,我們如何避免其被dismiss掉呢?
要想實現這一點,其實只需一句代碼:
setFinishOnTouchOutside(false)即可,這有點像popupwindow的setOutsideTouchable(false);
要做到按返回鍵也不消失的話,只需屏蔽返回鍵或重寫backpress方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
////在預設情況下是會調用finish()方法的
///super.onBackPressed();
}
/////這個是activity本來要實現的方法
public void onBackPressed() {
if (!mFragments.popBackStackImmediate()) {
finish();
}
}
這樣做還不夠,activity以dialog的形式顯示,寬度會比較小,這就需要我們自己給定寬度了:
WindowManager manager = getWindowManager();
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = manager.getDefaultDisplay();
display.getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = (int) (width*0.8);
getWindow().setAttributes(params);
這樣我們就設定好了activity的寬度了。
自訂dialog-----activity