नेविगेशन ड्रावर खुला है तो कैसे पता करें?


89

शीर्षक यह सब समझाता है। नेविगेशन ड्रॉअर खुला है या नहीं, यह जानने के लिए मैं क्या करना चाहता हूं। मैंने नेट पर बहुत खोज की और विधि पाई, isDrawerOpen(int drawerGravity)लेकिन एक संतोषजनक उत्तर नहीं मिला, जो बताता है कि इसे एक विधि में कैसे उपयोग किया जाए। अगर कोई मुझे समझाता है तो मैं उसकी सराहना करूंगा।

अग्रिम में धन्यवाद!


3
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)। mDrawerLayout ड्राअर है और mDrawerList लिस्टव्यू है
रघुनंदन

@ रघुनंदन बहुत-बहुत धन्यवाद!
चिन्मय डबके

जवाबों:


213

मान लें कि आपने xml में एक ड्रारेलआउट को परिभाषित किया है:

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

क्या इसका मतलब यह है कि दराज खुला है?
चिन्मय डबके

8
हालांकि यह कई लोगों के लिए स्पष्ट हो सकता है, मैं इंगित करना चाहता हूं कि isDrawerOpen (GravityCompat.END)) का उपयोग किया जाना चाहिए यदि दराज को दाईं ओर से खोला जाता है (यानी एंड्रॉइड: लेआउट_ग्रेविटी = "सही")
हांग

3
İ यदि आप बन्द करना चाहते हैं तो आपको इस चित्र को यदि staments drawer.closeDrawer (Gravity.vARTART) में जोड़ना चाहिए;
mehmet

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

कि श्रोता उपयोग :)


धन्यवाद, लेकिन मैं नेविगेशन ड्रावर के साथ एक्शनबार का उपयोग नहीं कर रहा हूं। बस इसे एक विधि में उपयोग करने की आवश्यकता है!
चिन्मय डबके

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

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

AddRrawerListener का उपयोग करें क्योंकि सेट को हटा दिया गया है
SeaRoth

3

शेकज ने इसका सही उत्तर दिया है, और याद रखें कि आप ऑनड्रावरस्लाइड का उपयोग अन्य कार्यों को करने में सक्षम होने के लिए कर सकते हैं ... उदाहरण के लिए मैंने स्टेटसबार कलर को बदलने के लिए इसका उपयोग किया था।

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

कोटलिन में विधि समान है।

  1. प्रारंभ DrawerLayout देखें

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

  2. जांचें कि क्या दराज खुला है

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

यदि आप ड्रावर खोलने या बंद होने पर स्वचालित रूप से कार्रवाई करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं।

  1. अपनी मुख्य गतिविधि में, एक आंतरिक वर्ग बनाएं जो कि ड्रालेलायआउट.ड्रावरलिस्टनर का उपवर्ग हो । 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. अपने कस्टम ड्राअरलिस्ट को ड्राअरलेआउट में जोड़ें (मैंने इसे ऑनक्रिट विधि में रखा)

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


1

हो सकता है, मुझे देर हो गई हो लेकिन मैं नई अद्यतन जानकारी साझा कर सकता हूं। दिए गए कोड में, मैं ऑनक्लिक फंक्शन में ओपन / क्लोज ड्रॉअर सेट करता हूं। अगर यह विल्ब की तुलना में ओपनर आइसोपेन है तो यह अन्य ओपन होगा (androidx.drawerlayout.widget.DrawerLayout)। यह सॉल्यूशन RXava DrawerLayout पर आधारित है । अपने कोड में मैं दाएं से बाएं ओर दराज खोलता हूं।

 @Override
    public void onClick(View view) {

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

}

नोट: यदि आप दाईं ओर से दराज निकालते हैं तो "GravityCompat.END" का उपयोग करें और यह "GravityCompat.START" की तुलना में बाईं ओर से खुला है । कोडिंग का आनंद लें .....

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.