天天看點

Android開發筆記: Activity使用Dialog樣式導緻點選空白處自動關閉的問題

将Activity設定成視窗的樣式實作Dialog或者Popupwindow效果在開發中是很常用的一種方式,在AndroidMenifest.xml中将需要設定的Activity增加android:theme="@android:style/Theme.Dialog"屬性即可。但是視窗化的Activity有個問題就是:點選視窗空白處Activity會finish。如何避免這個問題呢,辦法如下:

一、如果API Level>=11有兩種方式:

1、

res\values\styles.xml

<resources>
    <style name="Theme.SoundRecorder" parent="@android:style/Theme.Holo.DialogWhenLarge">
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>
</resources>      

2,

YourActivity.this.setFinishOnTouchOutside(false);      

二、如果API Level<11

@Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN && isOutOfBounds(this, event)) {
            return true;
        }
        return super.onTouchEvent(event);
    }

    private boolean isOutOfBounds(Activity context, MotionEvent event) {
        final int x = (int) event.getX();
        final int y = (int) event.getY();
        final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();
        final View decorView = context.getWindow().getDecorView();
        return (x < -slop) || (y < -slop)|| (x > (decorView.getWidth() + slop))|| (y > (decorView.getHeight() + slop));
    }