【问题标题】:Hide and Show Toolbar on touching anywhere on screen触摸屏幕上的任意位置时隐藏和显示工具栏
【发布时间】:2017-07-18 15:00:48
【问题描述】:

我已经成功实现了滚动工具栏隐藏/显示,但我卡在 onTouch 隐藏/显示工具栏。我研究了许多相关问题,但对我没有任何帮助。我希望我的工具栏在用户触摸屏幕隐藏,并在再次触摸屏幕时再次显示,请帮助

我正在使用 Android Studio

下面是我的 OnScrollListener java 类

this.mrecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            int mLastFirstVisibleItem = 0;

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            final int currentFirstVisibleItem = layout.findFirstVisibleItemPosition();

            if (currentFirstVisibleItem > this.mLastFirstVisibleItem) {
                HomePage.this.getSupportActionBar().hide();
            } else if (currentFirstVisibleItem < this.mLastFirstVisibleItem) {
                HomePage.this.getSupportActionBar().show();
            }

            this.mLastFirstVisibleItem = currentFirstVisibleItem;
        }
    });

更新

 mrecyclerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                ActionBar actionBar = getSupportActionBar();
                if(actionBar.isShowing()) {
                    actionBar.hide();
                } else
                    actionBar.show();
                return false;
            }
        });

这段代码有效,但现在的问题是,每当我触摸屏幕时,它显示工具栏,而当我拿起我的手指隐藏自己,并且当我使用 RecyclerView 时,滚动显示和隐藏所有内容变得越来越困难。请帮助使其稳定,这样如果我触摸一次它保持显示状态,而另一次触摸它就会隐藏起来。

【问题讨论】:

  • 所有您需要做的就是将 onTouchEvent 注册到视图以检测触摸。维护一个标志并根据标志显示/隐藏工具栏。
  • 我已将 onTouchListener 注册到 RecycleView ,您能帮我解决 flags
  • 布尔 isToolbarVisible; //当屏幕被触摸时 if(isToolbarVisible){ hideToolbar; isToolbarVisible=false; }else{ 显示工具栏; isToolbarVisible=true; }
  • 我试过了,但它不起作用:(
  • @SubhechhuKhanal 我已经用 onTouch 更新了我的问题,你能编辑它并告诉我哪里做错了吗。

标签: java android android-actionbar toolbar ontouchlistener


【解决方案1】:

给你。这应该工作:)

layout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (actionBar.isShowing()) {
                        actionBar.hide();
                    } else {
                        actionBar.show();
                    }
                    return true;
                } else return false;
            }
        });

【讨论】:

  • 上面的代码工作正常,但现在唯一的问题是,每当我尝试触摸任何其他功能的任何地方时,工具栏都会再次显示和隐藏,例如,如果我再次滚动它,一键式就会显示出来隐藏在另一个卷轴上,你能告诉我如何克服这个问题。
【解决方案2】:

将 onTouchListener 用于您的根布局。并在回调中编写代码。

【讨论】:

  • 我已经在上面做了,但没有任何效果,它显示了我的工具栏,当我将手指放在屏幕上时它会隐藏它,并且在手指再次显示它之后,它不会等待第二次触摸跨度>
  • 为第一次触摸设置布尔标志。并根据您的情况处理场景。或者你可以使用触摸计数器来处理它。
  • 感谢您的回答,但我无法实现布尔标志,您能帮帮我吗
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2015-12-29
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多