Java 如何在不点击任何项目的情况下,在固定时间后关闭打开的导航抽屉?
在创建我的主要活动时,我打开了一个导航抽屉。我还想在显示1或2秒后关闭导航抽屉 我试过了Java 如何在不点击任何项目的情况下,在固定时间后关闭打开的导航抽屉?,java,android,android-layout,Java,Android,Android Layout,在创建我的主要活动时,我打开了一个导航抽屉。我还想在显示1或2秒后关闭导航抽屉 我试过了 if(navDrawer.isHovered()){ navDrawer.closeDrawers(); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_
if(navDrawer.isHovered()){
navDrawer.closeDrawers();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setToolbarContent(imgNotification,txtNotification);
fragmentManager = getSupportFragmentManager();
navDrawer.openDrawer(rightNavigationView,true);
if(navDrawer.isHovered()){
navDrawer.closeDrawers();
}
}
我想知道如何设置关闭导航抽屉的计时器。有什么办法吗。试着在2秒钟后关闭
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
navDrawer.closeDrawers();
}
},2000);
步骤1:添加导航抽屉的侦听器,在打开的回调中实现此操作
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
在该方法中实现该代码
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(navDrawer.isOpened()){
navDrawer.closeDrawers();
}
}
},2000);
不要只创建随机处理程序对象,因为这可能会导致问题,例如由于挂起的指令可运行而导致抽屉随机关闭。 您可以直接向视图发布/发布延迟可运行项。 e、 g:-
当抽屉打开时开始延迟后,检查抽屉是否打开。欢迎来到StackOverflow!请注意,在经过一定时间后自动关闭抽屉并不是一个好主意,因为这可能是一种不好的可访问性方法,特别是对于阅读速度慢的用户/需要一段时间来决定单击什么。还有,你有什么正当的理由要在一段时间后关闭抽屉吗?@Rohit谢谢,我尝试过这种方法,效果很好。@AKMShahabUddin接受答案,如果有帮助的话
class ExampleActivity extends AppCompatActivity {
private static final long AUTO_CLOSE_DELAY = 2000L;
@Nullable
private DrawerLayout drawerLayout;
@NonNull
private final Runnable closeDrawerRunnable = new Runnable() {
@Override
public void run() {
if(drawerLayout!=null && drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
drawerLayout = findViewById(R.id.drawerLayout);
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(@NonNull View drawerView) {
drawerLayout.removeCallbacks(closeDrawerRunnable);
drawerLayout.postDelayed(closeDrawerRunnable,AUTO_CLOSE_DELAY);
}
@Override
public void onDrawerClosed(@NonNull View drawerView) {
drawerLayout.removeCallbacks(closeDrawerRunnable);
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
}