【问题标题】:Handling activity toolbar visibility according to visible fragment根据可见片段处理活动工具栏可见性
【发布时间】:2018-09-23 14:08:35
【问题描述】:

在我的 android 应用程序中,我有一个活动和许多片段。但是,我只想显示某些片段的工具栏,而其他我希望片段全屏显示。最好和推荐的方法是什么(根据可见片段显示和隐藏活动工具栏)?

【问题讨论】:

  • 在按钮的 onclick 侦听器中,只要您不想要工具栏,只需将代码添加到 toolbar.setVisibility(View.GONE) 和想要工具栏时的 toolbar.setVisibility(View.VISIBLE)

标签: android android-fragments android-activity android-toolbar


【解决方案1】:

我更喜欢为此使用界面。

public interface ActionbarHost {
    void showToolbar(boolean showToolbar);
}

让您的活动实现 ActionbarHost 并将 showToolbar 覆盖为。

@Override
public void showToolbar(boolean showToolbar) {
    if (getSupportActionBar() != null) {
        if (showToolbar) {
            getSupportActionBar().show();
        } else {
            getSupportActionBar().hide();
        }
    }
}

现在从你的片段初始化 onAttach()

private ActionbarHost actionbarHost;
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof ActionbarHost) {
        actionbarHost = (ActionbarHost) context;
    }
}

现在,如果您想从片段中隐藏操作栏调用 actionbarHost.showToolbar(false);

if (actionbarHost != null) {
            actionbarHost.showToolbar(false);
        }

另外我建议在onDetach()再次展示它

@Override
public void onDetach() {
    super.onDetach();
    if (actionbarHost != null) {
        actionbarHost.showToolbar(true);
    }
}

【讨论】:

    【解决方案2】:

    由于您需要不同的表示形式,因此您的每个片段都应该(当您需要时)有自己的toolbar

    因此您的Activity 的布局将有一个简单的fragment_container。

    【讨论】:

      【解决方案3】:

      如果您使用的是 viewPager,那么您可以只使用 MainActivity 中的单个工具栏来执行此操作

       pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
              @Override
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
      
              }
      
              @Override
              public void onPageSelected(int position) {
      
                    if(position==YourFragmentPosition)
                              {
                           toolbar.setVisibility(View.VISIBLE);
                                 }
                        else{
                            toolbar.setVisibility(View.GONE);
                           }
                  }
              }
      
              @Override
              public void onPageScrollStateChanged(int state) {
      
          });
      

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 2017-08-25
        相关资源
        最近更新 更多