Gezinme çekmecesinin açık olup olmadığı nasıl tespit edilir?


91

Başlık her şeyi açıklıyor. Tek yapmak istediğim, gezinme çekmecesinin açık olup olmadığını bilmek. İnternette çok araştırdım ve yöntemi buldum isDrawerOpen(int drawerGravity)ancak bir yöntemde nasıl kullanılacağını açıklayan tatmin edici bir cevap bulamadım. Biri bana bunu açıklarsa çok sevinirim.

Şimdiden teşekkürler!


3
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList). mDrawerLayout çekmecedir ve mDrawerList liste görünümüdür
Raghunandan

@Raghunandan Çok teşekkürler!
Chinmay Dabke

Yanıtlar:


215

Xml'de bir çekmece düzeni tanımladığınızı varsayarsak:

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
  //drawer is open
}

Bu, çekmecenin açık olduğu anlamına mı geliyor?
Chinmay Dabke

8
Pek çok kişi için bariz olsa da, çekmece sağdan açılırsa (yani android: layout_gravity = "right") isDrawerOpen (GravityCompat.END)) kullanılması gerektiğini belirtmek isterim
Hong

3
Kapatmak isterseniz bu komutu staments'a eklemelisiniz drawer.closeDrawer (Gravity.START);
mehmet

34
 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            mDrawerLayout,         /* DrawerLayout object */
            R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description */
            R.string.drawer_close  /* "close drawer" description */
            ) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getActionBar().setTitle(mTitle);
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getActionBar().setTitle(mDrawerTitle);
        }
    };

    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);

Bu dinleyici kullanır :)


Teşekkürler ama gezinme çekmeceli bir eylem çubuğu kullanmıyorum. Sadece bir yöntemde kullanman gerekiyor!
Chinmay Dabke

20

Kullanım:

mDrawerLayout.isDrawerOpen () yöntemi

Misal:

    if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        mDrawerLayout.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer!
    }else{
        mDrawerLayout.openDrawer(Gravity.LEFT); //OPEN Nav Drawer!
    }

3
çekmece açıksa, çekmeceyi açın, yoksa çekmeceyi kapatın: D
ataulm

5

Aşağıdaki yolla Çekmecenin açık veya kapalı olduğunu görebilirsiniz ..

 public class YourActivity extends AppCompatActivity implements  DrawerLayout.DrawerListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dash_board);

        DrawerLayout drawer=(DrawerLayout)findViewById(R.id.container);
        drawer.setDrawerListener(this);
    }//onCreate()

    @Override
    public void onDrawerOpened(View arg0) {
      //write your code
    }

    @Override
    public void onDrawerClosed(View arg0) {
        //write your code
    }

    @Override
    public void onDrawerSlide(View arg0, float arg1) {
        //write your code
    }

    @Override
    public void onDrawerStateChanged(int arg0) {
        //write your code
    }
}//class

Set kullanımdan kaldırıldığından beri addDrawerListener'ı kullanın
SeaRoth

3

shakeJ'nin cevabı doğru cevaptır ve diğer işlevleri ateşleyebilmek için onDrawerSlide'ı kullanabileceğinizi unutmayın ... örneğin StatusBar Color'ı değiştirmek için kullandım.

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            isOpen = false;
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            isOpen = true;
        }
        public void onDrawerSlide(View drawerView,float slideOffset){
            super.onDrawerSlide(drawerView,slideOffset);
            if(!isOpen){
                setStatusBarColor("#00102b");
            }
            if(isOpen){
                setStatusBarColor("#EFEFF0");
            }
        }

3

Açık DrawerLayout, kapalı, sürgülü DrawerLayout.DrawerListener algıla

DrawerLayout drawerLayout:
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
    /**
     * Called when a drawer's position changes.
     *
     * @param slideOffset The new offset of this drawer within its range, from 0-1
     *                    Example when you slide drawer from left to right, slideOffset will increase from 0 - 1 (0 when drawer closed and 1 when drawer display full)
     */
    @Override
    public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {

    }

    @Override
    public void onDrawerOpened(@NonNull View drawerView) {
        // do something when drawer opened
    }

    @Override
    public void onDrawerClosed(@NonNull View drawerView) {
        // do something when drawer closed
    }

    /**
     * Called when the drawer motion state changes. The new state will
     * be one of {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
     */
    @Override
    public void onDrawerStateChanged(int newState) {

    }
});

Çek Çekmecesi açıldı

if(drawerLayout.isDrawerOpen(GravityCompat.START)) // or  GravityCompat.END

1

Yöntem Kotlin'de aynıdır.

  1. Başlat DrawerLayout Görünümü

    val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)

  2. Çekmecenin açık olup olmadığını kontrol edin

    if(drawerLayout.isDrawerOpen(GravityCompat.START)){ Log.d("Drawer","open") }

Çekmece açıldığında veya kapatıldığında otomatik olarak işlem yapmak istiyorsanız, aşağıdakileri yapabilirsiniz.

  1. Ana etkinliğinizde, DrawerLayout.DrawerListener öğesinin bir alt sınıfı olan bir iç sınıf oluşturun . DrawerLayout sınıfı, DrawerListener arabirimini uygular.

    inner class CustomDrawer : DrawerLayout.DrawerListener{
      override fun onDrawerStateChanged(newState: Int) {
      }
    
      override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    
      override fun onDrawerClosed(drawerView: View) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    
      override fun onDrawerOpened(drawerView: View) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    }
    
  2. Eyleminizi kullanmak istediğiniz işleve koyun. Örneğimde, kullanıcı gezinme çekmecesi ile etkileşim kurarsa yazılım klavyesini kapatıyorum. InputMethodManager'ı ana etkinliğinizde şu şekilde bildirin:

    var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)

  3. Özel DrawerListener'ınızı drawerLayout'a ekleyin (onu onCreate yöntemine koydum)

    var drawerListener = CustomDrawer() drawerLayout.addDrawerListener(drawerListener)


1

Olabilir, geciktim ama yeni güncellenmiş bilgileri paylaşabilirim Verilen kodda onclick fonksiyonunda aç / kapa çekmeceyi ayarlıyorum, eğer çekmece daha açık ise kapanırsa açılacaktır.Bu çözüm RXava DrawerLayout'a dayanmaktadır (androidx.drawerlayout.widget.DrawerLayout). Kodumda sağdan sola çekmece düzenini açıyorum.

 @Override
    public void onClick(View view) {

  if (drawerLayout.isDrawerVisible(GravityCompat.END)) {
                    drawerLayout.closeDrawer(GravityCompat.END);
  }else {
                    drawerLayout.openDrawer(GravityCompat.END);
  }

}

Not: DrawerLayout'u sağ taraftan açarsanız "GravityCompat.END" kullanın ve sol taraftan açıksa "GravityCompat.START" kullanın . Kodlamanın keyfini çıkarın .....

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.