标题说明了一切。我想要做的就是知道导航抽屉是否打开。我在网上搜索了很多并找到了该方法isDrawerOpen(int drawerGravity)
,但找不到一个令人满意的答案来解释如何在方法中使用它。如果有人向我解释,我将不胜感激。
提前致谢!
标题说明了一切。我想要做的就是知道导航抽屉是否打开。我在网上搜索了很多并找到了该方法isDrawerOpen(int drawerGravity)
,但找不到一个令人满意的答案来解释如何在方法中使用它。如果有人向我解释,我将不胜感激。
提前致谢!
假设您在 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
检测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
ShakeJ 的回答是正确的,记住你可以使用onDrawerSlide来触发其他功能……例如,我用它来更改状态栏颜色。
/** 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");
}
}
可能是,我迟到了,但我可以分享新的更新信息。在给定的代码中,我在 onclick 函数中设置了打开/关闭抽屉。如果抽屉是打开的,它将被关闭,否则打开。这个解决方案基于 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);
}
}
注意:如果您从右侧打开抽屉布局,请使用"GravityCompat.END"并且它是从左侧打开的,而不是使用"GravityCompat.START"。享受编码......
The method is the same in Kotlin.
Initialize the DrawerLayout View
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
Check if the drawer is open
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
Log.d("Drawer","open")
}
If you want to take actions automatically when the drawer is opened or closed, you can do the following.
In your main activity, create an inner class that is a subclass of DrawerLayout.DrawerListener. The DrawerLayout class implements the DrawerListener interface.
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)
}
}
Put your action in the function you want to use. In my example, I'm closing the soft keyboard if the user interacts with the navigation drawer. Declare the InputMethodManager like this in your main activity:
var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
Add your custom DrawerListener to the drawerLayout (I put it in the onCreate method)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)