【问题标题】:how to pin title in Toolbar inside CollapsingToolbarLayout如何在 CollapsingToolbarLayout 内的工具栏中固定标题
【发布时间】:2015-10-02 21:32:09
【问题描述】:

这是我的布局:

<android.support.design.widget.AppBarLayout

    <android.support.design.widget.CollapsingToolbarLayout
        ...

        <android.support.v7.widget.Toolbar
            ...
        />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

我希望标题保留在工具栏中,而不是在 CollapsingToolbarLayout 中。所以我改变了我的代码:

mCollapsingToolbar = ...
mCollapsingToolbar.setTitle(title);

到:

mTitleBar = ...
setSupportActionBar(mTitleBar);
getSupportActionBar().setTitle(title);

但标题不可见。我的设备是 Nexus 6 5.1.0

提前致谢。


更新 1:我已将代码更改为此,仍然无法正常工作:(

setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(title);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

更新 2:这是这三个视图的代码 sn-p:

private void setUpAppBarLayout() {
    AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar_layout);
    appBarLayout.setBackgroundColor(extractBackgroundColor());
}

private void setUpCollapsingToolbarLayout() {
    if (null == mCollapsingToolbar) {
        mCollapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
    }
}

private void setUpToolbar(String title) {
    mToolbar = (Toolbar) findViewById(R.id.tb_main);
    mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            supportFinishAfterTransition();
        }
    });
    mToolbar.inflateMenu(R.menu.menu_group_activity);
    mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if (R.id.action_settings == item.getItemId()) {
                ...
                return true;
            } else {
                return false;
            }
        }
    });
    mToolbar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mRecyclerView.smoothScrollToPosition(0);
        }
    });

    setSupportActionBar(mToolbar);
    getSupportActionBar().setTitle(title);
    getSupportActionBar().setDisplayShowTitleEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

调用setSupportActionBar(mToolbar)后,title和menu都是不可见的。

【问题讨论】:

标签: android toolbar android-collapsingtoolbarlayout


【解决方案1】:

为了使工具栏标题与 CollapsingToolbarLayout 一起使用,您需要将 ctl 的标题设置为 false

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbarLayout.setTitleEnabled(false);

【讨论】:

    【解决方案2】:

    解决方法很简单。正如 Daniel Persson 所说,您只需设置 collapsingToolbarLayout.setTitleEnabled(false); 或使用 XML 属性 app:titleEnabled="false" 并使用内部工具栏而不是 CollapsingToolbarLayout 设置标题,即:toolbar.setTitle(title);

    这很简单,不需要变通方法。

    【讨论】:

      【解决方案3】:

      实际上,当您将工具栏的标题包装在 CollapsingToolBarLayout 中时,它看起来好像消失了,所以我为这个问题得到的唯一解决方案是创建一个新的 TextView 并将其添加到工具栏,记住工具栏是一个 ViewGroup ,因此您可以向其中添加小部件。它不像我想要的那样干净,但它现在可以工作。

      TextView text = new TextView(this);
      text.setText(title);
      text.setTextAppearance(this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse);
      toolbar.addView(text);
      

      希望我也能尽快找到一个对 xml 友好的解决方案。

      【讨论】:

      • 为了使文本出现在正常位置添加 text.setPadding(16,0,0,0);
      • 这个解决方案不是最好的。您可以在下面的帖子中阅读我的解决方案
      【解决方案4】:

      这里的窍门是设置CollapsingToolbarLayout的titleEnabled = false

      <android.support.design.widget.CollapsingToolbarLayout
              android:id="@+id/collapsing_toolbar_layout"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              app:contentScrim="?attr/colorPrimary"
              app:layout_scrollFlags="scroll|enterAlways"
              app:titleEnabled="false">
      
              <android.support.v7.widget.Toolbar
                  android:id="@+id/toolbar"
                  android:layout_width="match_parent"
                  android:layout_height="?attr/actionBarSize"
                  android:minHeight="?attr/actionBarSize"
                  app:layout_collapseMode="pin"
                  app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                  app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                  app:title="Message"
                  app:titleMarginTop="13dp"
                  app:titleTextColor="@android:color/white" />
      
          </android.support.design.widget.CollapsingToolbarLayout>
      

      或者通过代码:

      CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
      collapsingToolbarLayout.setTitleEnabled(false);
      

      【讨论】:

      • 继续使用 setTitleEnabled
      【解决方案5】:

      您需要在您的代码中启用actionBar.setDisplayHomeAsUpEnabled(true);

      【讨论】:

      • 你能把你的代码贴在这里吗?这样我们就可以检查问题出在哪里
      • 谢谢 saikrupa。如何固定标题?
      • 我不希望 CollapsingToolbarLayout 折叠标题,我希望标题文本像操作栏中的标题一样留在工具栏中;
      • 他希望在可折叠工具栏展开时将标题保留在工具栏中。而不是使用折叠工具栏移动。如果我理解正确......我也在努力解决这个问题
      【解决方案6】:

      也许是这个?只需将android:fitsSystemWindows="true" 添加到AppBarLayout

      <android.support.design.widget.CoordinatorLayout
          ...
          android:fitsSystemWindows="true">
      
          <android.support.design.widget.AppBarLayout
              android:layout_width="match_parent"
              android:layout_height="300dp"
              ...
              android:fitsSystemWindows="true"
              >
      
              <android.support.design.widget.CollapsingToolbarLayout
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  >
      
                  <android.support.v7.widget.Toolbar
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:minHeight="?attr/actionBarSize"
                      android:background="?attr/colorPrimary"
                      app:title="My Title"
                      />
      
              </android.support.design.widget.CollapsingToolbarLayout>
      
          </android.support.design.widget.AppBarLayout>
      
          ...
      
      </android.support.design.widget.CoordinatorLayout>
      

      This is what you get

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-10
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 2015-08-14
        相关资源
        最近更新 更多