工具栏标题左侧有很多额外的填充

时间:2017-07-11 17:50:58

标签: android android-fragments android-toolbar

我有一个跨片段存在的工具栏。第一个片段没有向上导航,但是当我导航到第二个片段时,我做了" up"出现箭头(返回第一个片段)。但是,当我回到第一个片段并且向上箭头消失时,标题左侧有大量的填充。 (gif循环,注意' Fragment 1'标题远离左边)

enter image description here

我认为这与在我的工具栏上设置android:animateLayoutChanges="true"有关,因为如果删除该行,则填充消失:

enter image description here

我无法找出原因,如果有人有解决方案可以帮助我真的很感激它;是否要找到一种不同的方式来设置工具栏的动画,或者如何摆脱填充。

以下是我迄今为止尝试过的事情:

  • 在片段转换之前获取标题文本的相对位置,然后执行toolbarTitle.setLeft(oldLeft),但永远不会设置oldLeft值。
  • 尝试通过在工具栏定义中添加app:contentInsetLeft="0dp" app:contentInsetStart="0dp"来删除工具栏中的填充,但这只会删除16dp的填充。

我认为这不重要,但这是我的工具栏代码。我填充了每个片段onCreateOptionsMenu中的动作。

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:animateLayoutChanges="true"
app:theme="@style/ToolBarStyle">

<TextView
    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
    android:id="@+id/toolbar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DEFAULT"
    android:gravity="start"
    android:textColor="@color/white" />

1 个答案:

答案 0 :(得分:0)

我知道这是一种黑客行为,但我在网上找不到任何东西,因此实际上对我有用:

 toolbar.post {
            val childCount = toolbar.childCount
            for (i in 0..childCount) {
                val child = toolbar.getChildAt(i)
                if (child is TextView) {
                    if (toolbar?.navigationIcon == null) {
                        val animator = ObjectAnimator.ofInt(child, "left", toolbar.contentInsetStart)
                        animator.duration = 300
                        animator.start()
                    }
                }
            }
        }

基本上,当工具栏上没有显示图标(导航后)时,我将toolbar.contentnInsetStartObjectAnimator结合使用,将带有动画的标题移回其原始位置。

需要注意的是animator.duration的持续时间应与animateLayoutChanges相同,因此,如果您使用的自定义动画器的持续时间不同,请改用它,否则请使用以下内容:标题会跳回到错误的位置。