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

如何防止 Android Studio 在项目导航中自动折叠我的包?

如何开启解决android studio的模拟器的问题

android studio aar能加密吗