নেভিগেশন ড্রয়ারটি খোলা থাকলে কীভাবে সনাক্ত করবেন?


91

শিরোনাম এটি সব ব্যাখ্যা করে। আমি যা করতে চাই তা হ'ল নেভিগেশন ড্রয়ারটি খোলা আছে কি না। আমি নেটে প্রচুর অনুসন্ধান করেছি এবং পদ্ধতিটি পেয়েছি isDrawerOpen(int drawerGravity)তবে সন্তোষজনক উত্তর খুঁজে পেলাম না যা এটি কোনও পদ্ধতিতে কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করে। যদি কেউ আমাকে এটি ব্যাখ্যা করে তবে আমি প্রশংসা করব।

আগাম ধন্যবাদ!


4
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)। এমড্রাওয়ারলআউট হ'ল ড্রয়ার এবং এমড্রেয়ারলিস্ট হল লিস্টভিউ
রঘুনন্দন

@ রঘুনন্দন অনেক ধন্যবাদ!
চিন্ময় ডাবকে

উত্তর:


215

ধরে নিই যে আপনি এক্সএমএলে একটি ড্রয়ারলেআউট সংজ্ঞায়িত করেছেন:

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

এর অর্থ কী ড্রয়ারটি খোলা আছে?
চিন্ময় ডাবকে

8
যদিও এটি অনেকের কাছেই স্পষ্ট হতে পারে তবে আমি উল্লেখ করতে চাই যে "ড্রয়ারওপেন (গ্র্যাভিটিকম্প্যাট.এন্ড)" ব্যবহার করা উচিত যদি ড্রয়ারটি ডান থেকে খোলা হয় (যেমন অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি = "ডান")
হংকং

4
যদি আপনি বন্ধ করতে চান তবে স্ট্যামেন্টস ড্রয়ার.ক্লসড্রেয়ার (গ্র্যাভিটি.এসটিআরটি) থাকলে এই কমেেন্টটি যুক্ত করা উচিত;
মেহমেট

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

যে শ্রোতা ব্যবহার :)


ধন্যবাদ তবে আমি নেভিগেশন ড্রয়ারের সাথে অ্যাকশনবার ব্যবহার করছি না। এটি কেবল কোনও পদ্ধতিতে ব্যবহার করা দরকার!
চিন্ময় ডাবকে

20

ব্যবহার:

mDrawerLayout.isDrawerOpen () পদ্ধতি

উদাহরণ:

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

4
ড্রয়ারটি খোলা থাকলে, ড্রয়ারটি খুলুন, অন্যথায় ড্রয়ারটি বন্ধ করুন: ডি
আতাউলম

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

সেটটি অবহেলিত হওয়ায় অ্যাডড্রেয়ারলিস্টনার ব্যবহার করুন
সিআরথ

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

কোটলিনে পদ্ধতিটি একই রকম।

  1. আরম্ভ DrawerLayout দেখুন

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

  2. ড্রয়ারটি খোলা আছে কিনা তা পরীক্ষা করে দেখুন

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

ড্রয়ারটি খোলা বা বন্ধ হয়ে গেলে আপনি যদি স্বয়ংক্রিয়ভাবে পদক্ষেপ নিতে চান, আপনি নিম্নলিখিতটি করতে পারেন।

  1. আপনার মূল ক্রিয়াকলাপে, একটি অভ্যন্তর শ্রেণি তৈরি করুন যা ড্রয়ারলআউট.ড্রেওয়ারলিস্টেনারের একটি সাবক্লাস । ড্রয়ারলআউট ক্লাসটি ড্রয়ারলিস্টনার ইন্টারফেস প্রয়োগ করে।

    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. আপনি যে ফাংশনটি ব্যবহার করতে চান তাতে আপনার ক্রিয়াটি রাখুন। আমার উদাহরণস্বরূপ, যদি ব্যবহারকারী নেভিগেশন ড্রয়ারের সাথে ইন্টারঅ্যাক্ট করে তবে আমি সফট কীবোর্ডটি বন্ধ করছি। আপনার মূল ক্রিয়াকলাপে ইনপুটমিথড ম্যানেজারটিকে এটির মতো ঘোষণা করুন:

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

  3. আপনার কাস্টম ড্রয়ারলিস্টনারকে ড্রয়ারলয়েটে যুক্ত করুন (আমি এটি অনক্রিট পদ্ধতিতে রেখেছি)

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


1

হতে পারে, আমি দেরীতে হলেও আমি নতুন আপডেট হওয়া তথ্য ভাগ করতে পারি। প্রদত্ত কোড, আমি onclick function.If ড্রয়ারের isopen খোলা / বন্ধ ড্রয়ারের সেট তুলনায় এটি willbe বদ্ধ অন্য open.This সমাধান RXava DrawerLayout উপর ভিত্তি করে তৈরি (androidx.drawerlayout.widget.DrawerLayout)। আমার কোডে আমি ডান থেকে বামে ড্রয়ারলআউটটি খুলি।

 @Override
    public void onClick(View view) {

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

}

দ্রষ্টব্য: আপনি যদি ডান দিক থেকে ড্রয়ারলআউটটি খুলেন তবে "গ্র্যাভিটিকম্প্যাট.এএনডি" ব্যবহার করুন এবং এটি "গ্র্যাভিটিকম্প্যাট.এসটিআর্ট" ব্যবহার না করে বাম দিক থেকে উন্মুক্ত । কোডিং উপভোগ করুন .....

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.