2016-04-05 28 views
0

Açılır pencerelerin nasıl oluşturulacağını açıklayan bir YouTube öğretici videosunu (https://www.youtube.com/watch?v=wxqgtEewdfo) temel alarak, arka düğme yerine dokunma olayı ile açılır pencerenin nasıl kapatılacağını merak ediyordum ...Açılır pencereleri için geri düğmesini devre dışı bırakma

İşte MainActivity var:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RelativeLayout relative = (RelativeLayout)findViewById(R.id.relativeTest); 

    Button button = (Button)findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext(). 
        getSystemService(LAYOUT_INFLATER_SERVICE); 
      ViewGroup container = (ViewGroup) layoutInflater.inflate(R.layout.myLayout, null); 

      PopupWindow popupWindow = new PopupWindow(container, AbsListView.LayoutParams.MATCH_PARENT, 
        AbsListView.LayoutParams.MATCH_PARENT, true); 
      popupWindow.showAtLocation(relative, Gravity.CENTER, 0, 0); 

      container.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        popupWindow.dismiss(); 

        return true; 
       } 
      }); 
     } 
    }); 
} 

@Override 
public void onBackPressed() { 
    // I want the back button to be disabled for both MainActivity and the 
    // popup window. 
} 

... Ben (onBackPressed yerleştirmelidir) başka bir yerde veya hatta mümkün olabilir?

Şimdiden teşekkürler.

+0

BackPressed'i geçersiz kılabilir ve bazı mantık kullanabilirsiniz (örneğin, açılır pencerenin gösterilip gösterilmediğini denetleme). BackPressed'i gerçekten kullanmak istediğiniz durumlarda super.onBackPressed'i arayın. Örneğin, 'if (! MPopupWindow.isShowing()) super.onBackPressed();' – zgc7009

+0

[Android açılır pencere işten çıkarmanın] olası kopyası (http://stackoverflow.com/questions/3121232/android-popup-window-dismissal) –

+0

@ zgc7009 Ne demek istediğimi biliyorum ve daha önce yaptığım şeydi, ama burada vites değiştirdim ... Hem event_main hem de popup için genel olarak geri düğmesini devre dışı bırakmak istiyorum (yalnızca bir dokunma olayı tarafından reddedilebilir) ve Bir şekilde yalnızca API 23 (6.0) altındaki cihazlar için çalışır. – DaveNOTDavid

cevap

0

Tamam, şimdi (Filip YouTube videoyu yükleyen kredi) anladım ... Sorun dahil edildiğini ve aşağıdaki gibi bundan kurtuldum en kısa sürede true odaklanabilir PopupWindow, son parametreyi ayarlayın ve:

popupWindow = new PopupWindow(container, AbsListView.LayoutParams.MATCH_PARENT, 
        AbsListView.LayoutParams.MATCH_PARENT); 

... açılan artık dokunmatik olayı sadece kapatılabilen olduğunu.

0

Sadece BackBackPressed boş bırakın. super.OnBackPressed çizgiyi kaldırın

+0

... Ben de öyle yaptım. – DaveNOTDavid

+0

@Override public void onBackPressed() { moveTaskToBack (false); } –

0

bu deneyin: -

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (Integer.parseInt(android.os.Build.VERSION.SDK) > 5 
     && keyCode == KeyEvent.KEYCODE_BACK) { 
    Log.d("CDA", "onKeyDown Called"); 
    onBackPressed(); 
    return true; 
} 
return super.onKeyDown(keyCode, event); 
} 
+0

Hayır, fark yaratmadı ... Yardımı takdir ediyorum btw! – DaveNOTDavid

+1

Teşekkürler ...... Daha fazla araştırma yapmaya çalışacağım –

+0

Şimdi anladım! Cevap yazımıma bak :) – DaveNOTDavid