2013-10-07 12 views
6

Witam mam zrobiony działalność na tym, że mogę otworzyć działalność jako Dialog popup z innej działalności, więc g.ot problem to jest z mojego tematu,jak ustawić anulowalną wartość false dla działania, gdy jest otwarte jako okno dialogowe?

<item `name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>` 

ale nie wiem co mam wartość zmienić wewnątrz "windowCloseOnTouchOutside", dzięki czemu mogę zrobić moje okno dialogowe aktywności ustawić anulować false ...? Mój kod w temacie jest jak poniżej:

<style name="Theme.Dialog"> 
     <item name="android:windowFrame">@null</item> 
     <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item> 
     <item name="android:windowBackground">@android:drawable/panel_background</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
     <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
     <item name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item> 
     <item name="android:windowActionModeOverlay">true</item> 

     <item name="android:colorBackgroundCacheHint">@null</item> 

     <item name="textAppearance">@android:style/TextAppearance</item> 
     <item name="textAppearanceInverse">@android:style/TextAppearance.Inverse</item> 

     <item name="textColorPrimary">@android:color/primary_text_dark</item> 
     <item name="textColorSecondary">@android:color/secondary_text_dark</item> 
     <item name="textColorTertiary">@android:color/tertiary_text_dark</item> 
     <item name="textColorPrimaryInverse">@android:color/primary_text_light</item> 
     <item name="textColorSecondaryInverse">@android:color/secondary_text_light</item> 
     <item name="textColorTertiaryInverse">@android:color/tertiary_text_light</item> 
     <item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_only</item> 
     <item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_only</item> 
     <item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisable</item> 
     <item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisable</item> 
     <item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisable</item> 
     <item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisable</item> 
     <item name="textColorHint">@android:color/hint_foreground_dark</item> 
     <item name="textColorHintInverse">@android:color/hint_foreground_light</item> 
     <item name="textColorSearchUrl">@android:color/search_url_text</item> 

     <item name="textAppearanceLarge">@android:style/TextAppearance.Large</item> 
     <item name="textAppearanceMedium">@android:style/TextAppearance.Medium</item> 
     <item name="textAppearanceSmall">@android:style/TextAppearance.Small</item> 
     <item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverse</item> 
     <item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverse</item> 
     <item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverse</item> 

     <item name="listPreferredItemPaddingLeft">10dip</item> 
     <item name="listPreferredItemPaddingRight">10dip</item> 
     <item name="listPreferredItemPaddingStart">10dip</item> 
     <item name="listPreferredItemPaddingEnd">10dip</item> 

     <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item> 
    </style> 

Odpowiedz

31

Można to zrobić w Javie kodowanie bardzo łatwo. Jeśli masz Aktywny (nawet jeśli wygląda jak dialogowych), to należy zrobić

this.setFinishOnTouchOutside(false); 

jeśli użyłeś Dialog klasę, należy zadzwonić

dialog.setFinishOnTouchOutside(false) 

jeśli chcesz zapobiec zamknięciu go po kliknięciu aktywności tła.

+0

"setFinishOnTouchOutside (fałsz)", na którym obiekt brata? – jigar

+1

Jeśli wyświetlasz okno dialogowe za pomocą klasy Dialog, to 'dialogObject.setCanceledOnTouchOutside (false);' w przeciwnym razie 'this.setCanceledOnTouchOutside (false);' –

+0

okies .... jego działanie ... bro ... dziękuję bardzo ...miłego dnia..! – jigar

1

To może ci pomóc. Jest to sposób, aby obsłużyć dotyk poza imprezy:

How to cancel an Dialog themed like Activity when touched outside the window?

istnieje sposób, aby uzyskać dialogowego-like „dotyk na zewnątrz, aby anulować” zachowanie z działalności wrażeń jak dialog, choć nie mam w pełni zbadał, czy ma niepożądane skutki uboczne.

W ramach metody aktywności onCreate(), przed utworzeniem widoku, ustawisz dwie flagi w oknie: Jedna, aby uczynić ją "niemodalną", aby umożliwić widokom innym niż widoki aktywności do odbierania zdarzeń. Druga polega na otrzymaniu powiadomienia, że ​​miało miejsce jedno z tych zdarzeń, które wyśle ​​ci zdarzenie przeniesienia ACTION_OUTSIDE.

Spróbuj jak poniżej:

public class MyActivity extends Activity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Make us non-modal, so that others can receive touch events. 
    getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    // ...but notify us that it happened. 
    getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); 

    // Note that flag changes must happen *before* the content view is set. 
    setContentView(R.layout.my_dialog_view); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    // If we've received a touch notification that the user has touched 
    // outside the app, finish the activity. 
    if (MotionEvent.ACTION_OUTSIDE == event.getAction()) { 
     finish(); 
     return true; 
    } 

    // Delegate everything else to Activity. 
    return super.onTouchEvent(event); 
    } 
} 
+0

Dziękuję bardzo za inną klasyfikację Androida ... – Vji

0

Najlepszym sposobem jest ten kod:

AlertDialog.Builder alert = new AlertDialog.Builder(Activity.this); 
alert.setCancelable(false); 
Powiązane problemy