Как отменить диалоговое окно, например «Активность», если коснуться за пределами окна? - PullRequest
44 голосов
/ 10 января 2011

У меня есть действие с темой диалога, и я хотел бы закрыть (закончить) это действие, когда кто-то касается экрана где-нибудь за пределами окна этого занятия? Как я могу это сделать?

Ответы [ 15 ]

0 голосов
/ 29 октября 2018

Для тех, кто хочет не закрывать диалоговое приложение, если касание находится вне диалогового окна.Добавьте эту строку

this.setFinishOnTouchOutside(false);

Она не закроет диалоговое окно

0 голосов
/ 08 февраля 2018

Использование метода setFinishOnTouchOutside для включения / выключения независимо от того, можно ли прикоснуться к нему снаружи.

Это работает для действия .

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_yoptions);
    /* your code here */

    // set outside touchable
    this.setFinishOnTouchOutside(true);
}
0 голосов
/ 28 апреля 2016

Просто добавьте этот элемент в styles.xml:

<style name="alert_dialog" parent="android:Theme.Dialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowBackground">@color/float_transparent</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:backgroundDimAmount">0.4</item>
</style>

И в onCreate() и до setContentView:

setTheme(R.style.alert_dialog);
0 голосов
/ 09 сентября 2014

Деятельность имеет dispatchTouchEvent использовать, что

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    finish();
    return super.dispatchTouchEvent(ev);

}
0 голосов
/ 10 января 2011

Если нет поддержки API, вы должны просто использовать FrameLayout для заполнения экрана и вручную создать всплывающее окно. Затем вы можете получить фокус в любом месте экрана и соответственно отобразить / скрыть изображения.

...