简体   繁体   English

固定时间不单击任何项​​目后如何关闭打开的导航抽屉?

[英]How to close an opened navigation drawer after a fixed time not clicking on any items?

I opened an navigation drawer onCreate() of my main activity. 我在主要活动的onCreate()上打开了一个导航抽屉。 I also want to close that navigation drawer after 1 or 2 second showing. 我还想在显示1或2秒后关闭该导航抽屉。

I tried 我试过了

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

I want to know how I can set an timer for the closing of the navigation drawer. 我想知道如何设置计时器以关闭导航抽屉。 Is there any way. 有没有办法。

Try this to close after 2 second 试试这个2秒后关闭

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            navDrawer.closeDrawers();
        }
    },2000);

Step 1: Add a Listener of Nav Drawer , in opened call back implement this 第1步:添加Nav Drawer的监听器,在打开的回调中实现此功能

@Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);

        }

implement this code into this mehtod 将此代码实现到此方法中

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
if(navDrawer.isOpened()){
        navDrawer.closeDrawers();
}
    }
},2000);

Don't just create random handler objects, because that might cause issues like randomly closing of drawer due to pending instructions (runnables). 不要仅创建随机处理程序对象,因为这可能会导致诸如由于挂起指令(可运行对象)而随机关闭抽屉的问题。 You can directly post/post-delay runnables to views. 您可以直接将可运行对象发布/延迟到视图。 eg:- 例如:-

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

            }
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM