Название все объясняет. Все, что я хочу сделать, это знать, открыт ли ящик навигации или нет. Я много искал в сети и нашел метод, isDrawerOpen(int drawerGravity)
но не смог найти удовлетворительного ответа, объясняющего, как использовать его в методе. Буду признателен, если кто-нибудь мне это объяснит.
Заранее спасибо!
android
android-navigation
Чинмай Дабке
источник
источник
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)
. mDrawerLayout является ящик и mDrawerList является ListViewОтветы:
Предполагая, что вы определили drawerlayout в xml:
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ... if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) { //drawer is open }
источник
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);
Тот слушатель пользуется :)
источник
Использование:
mDrawerLayout.isDrawerOpen () метод
Пример:
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer! }else{ mDrawerLayout.openDrawer(Gravity.LEFT); //OPEN Nav Drawer! }
источник
Таким образом вы можете узнать, что ящик открыт или закрыт.
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
источник
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"); } }
источник
Обнаружение
DrawerLayout
открытого, закрытого, скользящего DrawerLayout.DrawerListenerDrawerLayout 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
источник
В Котлине метод такой же.
Инициализировать DrawerLayout View
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
Проверьте, открыт ли ящик
if(drawerLayout.isDrawerOpen(GravityCompat.START)){ Log.d("Drawer","open") }
Если вы хотите, чтобы действия выполнялись автоматически при открытии или закрытии ящика, вы можете сделать следующее.
В своей основной деятельности создайте внутренний класс, который является подклассом 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) } }
Поместите свое действие в функцию, которую хотите использовать. В моем примере я закрываю программную клавиатуру, если пользователь взаимодействует с панелью навигации. Объявите InputMethodManager в своем основном действии следующим образом:
var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
Добавьте свой собственный DrawerListener в drawerLayout (я поместил его в метод onCreate)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)
источник
Возможно, я опоздал, но могу поделиться новой актуальной информацией. В данном коде я установил открытие / закрытие ящика в функции onclick. Если ящик открыт, то он будет закрыт, иначе он будет открыт. Это решение основано на RXava DrawerLayout
(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); } }
Примечание. Если вы открываете drawerLayout с правой стороны, используйте «GravityCompat.END», а он открывается с левой стороны, чем используйте «GravityCompat.START» . Наслаждайтесь кодированием .....
источник