Android Studio:如何防止工具栏中的向上按钮将子视图向右推?
Posted
技术标签:
【中文标题】Android Studio:如何防止工具栏中的向上按钮将子视图向右推?【英文标题】:Android Studio: How to prevent up button in toolbar from pushing child view to the right? 【发布时间】:2017-10-14 15:28:25 【问题描述】:所以我有一个工具栏,它是包含两个文本视图的垂直线性布局的父级。当我在没有向上按钮的情况下运行活动时,一切看起来都很好。但是,当我添加向上按钮时,它似乎将线性布局推到了右侧。似乎有一个隐含的水平线性布局,包含向上按钮和我自己的垂直线性布局。
如果我无法阻止向上按钮执行此操作,是否可以设置向上按钮而不是通过编程方式进行设置?
旁注:我不使用 ActionBar.SetTitle/SetSubtitle 函数的原因是因为我无法按照自己的意愿设置它们的样式。但是,这些函数在间距方面没有相同的问题。
这是我的 onCreate 方法中的活动代码。我还添加了相关的导入语句:
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
//Get tool bar
Toolbar toolbar = (Toolbar) findViewById(R.id.thickToolBar);
setSupportActionBar(toolbar);
final ActionBar supportActionBar = getSupportActionBar();
supportActionBar.hide();
supportActionBar.setDisplayHomeAsUpEnabled(true); //If I comment out this line, things display normally. But ofc no up button
final TextView actionBarTitle = (TextView) findViewById(R.id.toolbar_title);
final TextView actionBarSubtitle = (TextView) findViewById(R.id.toolbar_subtitle);
supportActionBar.setDisplayShowTitleEnabled(false);
actionBarSubtitle.setText(query);
这是我的 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:layout_margin="0dp"
android:orientation="vertical"
android:padding="0dp"
tools:context="com.kreyoldict.kreyoldict.DefinitionActivity">
<RelativeLayout
android:id="@+id/progressBarContainer"
android:layout_
android:layout_
android:visibility="gone">
<ProgressBar
android:id="@+id/progressBarDefinitionActivity"
android:layout_
android:layout_
android:layout_centerInParent="true"
android:visibility="visible"/>
</RelativeLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/thickToolBar"
android:layout_
android:layout_
android:layout_margin="0dp"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:padding="0dp"
android:textAlignment="center"
android:theme="@style/AppActionBar"
android:visibility="visible"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp">
<LinearLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_margin="0dp"
android:layout_marginRight="0dp"
android:orientation="vertical"
android:padding="0dp">
<TextView
android:id="@+id/toolbar_title"
android:layout_
android:layout_
android:layout_gravity="center"
android:text="Translated Word"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Display2"
android:textColor="@android:color/white"/>
<TextView
android:id="@+id/toolbar_subtitle"
android:layout_
android:layout_
android:layout_gravity="center"
android:text="Original Text"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
android:textColor="@android:color/white"/>
</LinearLayout>
</android.support.v7.widget.Toolbar>
<ScrollView
android:id="@+id/scrollViewDefinitionActivity"
android:layout_
android:layout_
>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<TextView
android:id="@+id/textViewWordDefinition"
android:layout_
android:layout_
android:padding="20dp"
android:text="@string/tv_detail_activity_word_definition"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
这是我的照片
[组件树][1] 没关系,我需要更多代表才能发布 3+ 个链接。
这是带有向上按钮和布局边界的应用图片: up button shenanigans
有点难看,因为我的工具栏是红色的,但似乎线性布局从向上按钮结束的地方开始。
这是picture with no up button and layout bounds
【问题讨论】:
工具栏隐含地像一个水平线性布局。如果启用向上按钮,工具栏中的所有内容都将放置在箭头按钮的右侧。为什么不将线性布局移到工具栏外? 因为它位于工具栏下方而不是顶部。工具栏的父级是线性布局。 您可以将工具栏全部隐藏起来并创建一个垂直线性布局 .. 使用 ImageButton( Arrow ) 和下方居中的文本。在许多事情中,您可以在按钮单击时使用意图/片段事务返回!? 没错,我决定保留工具栏,但将向上按钮替换为图像按钮。谢谢! 确保在 ImageButton 中添加 android:background="@android:color/transparent" .. 这样它就不会占用任何额外的填充空间并且会使图像清晰! 【参考方案1】:Add this attributes to toolbar
<android.support.v7.widget.Toolbar
android:contentInsetLeft="0dp"
android:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"/>
【讨论】:
我的工具栏中已经有了最后三行。我添加了前两个,但不幸的是没有骰子。 尝试通过图像视图在工具栏中添加导航图标。使用相对布局作为工具栏中的根,图像视图作为顶部,线性布局作为父级的中心......在我的情况下工作。 是的,这就是我之前提出的解决方案。不过还是谢谢。以上是关于Android Studio:如何防止工具栏中的向上按钮将子视图向右推?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Dexguard 混淆 android studio 中的资源文件夹?
Android Studio 上的向后兼容性 (AppCompat)
如何防止Android studio格式化build.gradle