ナビゲーションドロワーが開いているかどうかを検出する方法は?


89

タイトルはそれをすべて説明します。ナビゲーションドロワーが開いているかどうかを確認するだけです。私はネットでたくさん検索して、方法を見つけましたisDrawerOpen(int drawerGravity)が、それを方法で使用する方法を説明する満足のいく答えを見つけることができませんでした。誰かが私にそれを説明してくれるとありがたいです。

前もって感謝します!


3
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)。mDrawerLayoutは引き出しで、mDrawerListは、リストビューで
Raghunandan

@Raghunandanありがとうございます!
Chinmay Dabke 2014

回答:


213

xmlで引き出しレイアウトを定義していると仮定します。

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

これは、引き出しが開いていることを意味しますか?
Chinmay Dabke 2014

8
それは多くの人にとって明白であるかもしれないが、引き出しは(右から開かれている場合、私が使用する必要があります)isDrawerOpen(GravityCompat.END)を指摘したいと思いすなわちアンドロイド:layout_gravity =「右」)
香港

3
閉じる場合は、このコメントをifステートメントに追加します。drawer.closeDrawer(Gravity.START);
メフメット2017年

32
 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);

そのリスナーの使用:)


ありがとうございます。ナビゲーションドロワー付きのアクションバーは使用していません。メソッドで使用するだけです!
Chinmay Dabke 2014

20

使用する:

mDrawerLayout.isDrawerOpen()メソッド

例:

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

3
引き出しが開いている場合は引き出しを開き、それ以外の場合は引き出しを閉じる:D
ataulm '25年

5

次の方法で、引き出しが開いているか閉じているかを確認できます。

 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

セットは非推奨であるため、addDrawerListenerを使用してください
SeaRoth

3

shakeJの答えは正解です。onDrawerSlideを使用して他の関数を起動できることを覚えておいてください。たとえば、StatusBarの色を変更するために使用しました。

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

DrawerLayout開いた、閉じた、スライドを検出するDrawerLayout.DrawerListener

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

    }
});

ドロワーが開いていることを確認してください

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

1

この方法はKotlinでも同じです。

  1. DrawerLayoutビューを初期化する

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

  2. 引き出しが開いているかどうかを確認します

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

引き出しを開いたり閉じたりしたときに自動的にアクションを実行したい場合は、次の操作を実行できます。

  1. メインアクティビティで、DrawerLayout.DrawerListenerのサブクラスである内部クラスを作成します。DrawerLayoutクラスは、DrawerListenerインターフェイスを実装します。

    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. 使用する関数にアクションを配置します。私の例では、ユーザーがナビゲーションドロワーを操作した場合、ソフトキーボードを閉じています。メインアクティビティで次のようにInputMethodManagerを宣言します。

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

  3. カスタムDrawerListenerをdrawerLayoutに追加します(私はonCreateメソッドに入れました)

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


1

遅れているかもしれませんが、更新された新しい情報を共有できます。与えられたコードで、私はonclick関数で引き出しを開く/閉じるを設定しました。引き出しが開いている場合は閉じられ、それ以外の場合は開かれ(androidx.drawerlayout.widget.DrawerLayout)ます。私のコードでは、drawerlayoutを右から左に開きます。

 @Override
    public void onClick(View view) {

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

}

注:drawLayoutを右側から開いて「GravityCompat.END」を使用し、左側から開いている場合は、「GravityCompat.START」を使用してください。コーディングをお楽しみください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.