Ответ 1
Предполагая, что вы определили drawerlayout в xml:
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
//drawer is open
}
Название объясняет все это. Все, что я хочу сделать, это знать, открыт ли ящик навигации или нет. Я много искал в сети и нашел метод isDrawerOpen(int drawerGravity)
, но не смог найти удовлетворительного ответа, в котором объясняется, как использовать его в методе. Буду признателен, если кто-нибудь объяснит это мне.
Спасибо заранее!
Предполагая, что вы определили 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!
}
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");
}
}
Следующим способом вы можете найти ящик открытым или закрытым.
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
Обнаружение DrawerLayout
открыто, закрыто, слайд DrawerLayout.DrawerListener
DrawerLayout drawerLayout:
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
/**
* Called when a drawer 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 Mydrawer = (DrawerLayout)findViewByid(R.id.drawerId);
if(Mydrawer.isDrawerOpen(Gravity.START)) {
//on opened do something
} else {
//on closed do something
}