如何禁用AppBarLayout中的所有可点击项?

时间:2018-03-10 13:26:30

标签: android android-view

点击clickable后出现不透明背景时,我正尝试停用app bar layout中的所有floating action button项。但我还需要确保所有floating action buttons都可以点击。我想也许我可以通过编程方式禁用应用栏中的所有项目?

如何实现这一目标?

enter image description here

更新 用于设置工厂可见性和动画的代码。显示Fab时,选项卡和工具栏最终被禁用且无法点击。但我想让我的Fabs仍然可以点击。我怎样才能做到这一点?请指教。谢谢!

public void fabVisibility(){
        if (isOpen){
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
            fabActivity.startAnimation(fabClose);
            textViewActivities.startAnimation(fabClose);
            fabPost.startAnimation(fabClose);
            textViewPosts.startAnimation(fabClose);
            fabMedia.startAnimation(fabClose);
            textViewMedia.startAnimation(fabClose);
            fabPlus.startAnimation(fabRotateAntiClockwise);
            fabActivity.setClickable(false);
            fabPost.setClickable(false);
            fabMedia.setClickable(false);
            shadowView.setVisibility(View.INVISIBLE);
            isOpen = false;
        }else {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
            fabActivity.startAnimation(fabOpen);
            textViewActivities.startAnimation(fabOpen);
            fabPost.startAnimation(fabOpen);
            textViewPosts.startAnimation(fabOpen);
            fabMedia.startAnimation(fabOpen);
            textViewMedia.startAnimation(fabOpen);
            fabPlus.startAnimation(fabRotateClockwise);
            fabPlus.setEnabled(true);
            fabActivity.setClickable(true);
            fabActivity.setEnabled(true);
            fabPost.setClickable(true);
            fabPost.setEnabled(true);
            fabMedia.setClickable(true);
            fabMedia.setEnabled(true);
            shadowView.setVisibility(View.VISIBLE);
            isOpen = true;
        }
     }

3 个答案:

答案 0 :(得分:0)

要禁用用户互动,您只需添加以下代码

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>

要获得用户互动,您只需添加以下代码

即可
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

答案 1 :(得分:0)

要在单击FAB图标时禁用操作栏(应用栏)按钮,您可以设置一个标志,例如DisableAppBarButton。 现在请致电invalidateOptionsMenu(),这将触发onCreateOptionsMenu并重新生成您的菜单。 修改您的onCreateOptionsMenu以禁用按钮。

if (DisableAppBarButton) {
    menu.someItem(R.id.yourItem).setEnabled(false);
} else {
    menu.someItem(R.id.yourItem).setEnabled(true);
}

答案 2 :(得分:0)

两个选项:

1 - 您可以通过递归设置其所有子项被禁用来设置要禁用的视图组。例如:

public static setEnabled(View view, boolean enabled) {
  view.setEnabled(enabled);
  if (view instanceof ViewGroup) {
    ViewGroup viewGroup = (ViewGroup) view;
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
      setEnabled(viewGroup.getChild(i), enabled);
    }
  }
}

然后在您的代码中响应FAB显示或隐藏:

ViewUtil.setEnabled(mAppBarLayout, true /* or false */);

2 - 您可以使不透明背景可聚焦且可点击以在点击覆盖应用栏时拦截点击,而浮动在该背景之上的FAB按钮仍会获得点击。

希望有所帮助!