我有一个跨片段存在的工具栏。第一个片段没有向上导航,但是当我导航到第二个片段时,我做了" up"出现箭头(返回第一个片段)。但是,当我回到第一个片段并且向上箭头消失时,标题左侧有大量的填充。 (gif循环,注意' Fragment 1'标题远离左边)
我认为这与在我的工具栏上设置android:animateLayoutChanges="true"
有关,因为如果删除该行,则填充消失:
我无法找出原因,如果有人有解决方案可以帮助我真的很感激它;是否要找到一种不同的方式来设置工具栏的动画,或者如何摆脱填充。
以下是我迄今为止尝试过的事情:
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" />
答案 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.contentnInsetStart
与ObjectAnimator
结合使用,将带有动画的标题移回其原始位置。
需要注意的是animator.duration的持续时间应与animateLayoutChanges
相同,因此,如果您使用的自定义动画器的持续时间不同,请改用它,否则请使用以下内容:标题会跳回到错误的位置。