2013-10-07 10 views
6

hi ho fatto un'attività che ho aperto un'attività come un pop-up di dialogo su un'altra attività, così ho g.ot il problema è del mio tema,come impostare cancellabile false su un'attività quando viene aperta come finestra di dialogo?

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

ma non so che valore dovrebbe io cambiare dentro "windowCloseOnTouchOutside" in modo che io possa fare il mio dialogo di attività impostato cancellabile falso ..? Il mio codice in tema è, come di seguito:

<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> 

risposta

31

Si può fare in Java codifica molto facilmente. Se avete un attività (anche se sembra una finestra di dialogo), allora si dovrebbe fare

this.setFinishOnTouchOutside(false); 

se avete usato di classe di dialogo, si dovrebbe chiamare

dialog.setFinishOnTouchOutside(false) 

se si desidera evitare di chiuderlo aperto quando si fa clic sull'attività in background.

+0

"setFinishOnTouchOutside (false)" a quale oggetto fratello? – jigar

+1

Se si sta aprendo una finestra di dialogo usando la classe Dialog, quindi 'dialogObject.setCanceledOnTouchOutside (false);' altrimenti 'this.setCanceledOnTouchOutside (false);' –

+0

okies .... suo funzionamento..bro ... grazie mille ...buona giornata..! – jigar

1

Questo potrebbe aiutarti. E 'un modo per gestire il tocco esterno evento:

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

C'è un modo per ottenere "tocco esterno per annullare" finestra di dialogo simile comportamento da un'attività a tema come un dialogo, anche se non ho pienamente indagato se ha effetti collaterali indesiderati.

All'interno del metodo onCreate() della tua attività, prima di creare la vista, devi impostare due flag sulla finestra: uno per renderlo 'non modale', per consentire a visualizzazioni diverse dalle viste dell'attività di ricevere eventi. Il secondo è quello di ricevere la notifica che uno di questi eventi ha avuto luogo, che ti invierà un evento di spostamento ACTION_OUTSIDE.

Prova come di seguito:

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

Grazie mille per la diversa classificazione di Android ... – Vji

0

Il modo migliore è di questo codice:

AlertDialog.Builder alert = new AlertDialog.Builder(Activity.this); 
alert.setCancelable(false);