如何将进度条放置在工具栏的右侧?

26

使用新的Lollipop API,如果我们想要个性化操作栏外观,就必须使用工具栏。

像Chris Banes所说的那样,将进度条添加到工具栏视图组中就像将其添加到工具栏视图组一样简单。as Chris Banes said

<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="wrap_content"
    android:background="@color/material_green_500"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <!-- Color is Brown 500 -->
    <ProgressBar
        android:id="@+id/toolbar_progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminateTint="#795548"
        android:indeterminateTintMode="src_in"/>

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

但是我们如何将它放置在工具栏的右侧,它应该在那里呢?
“layout_gravity”属性似乎没有为工具栏定义。从xml中设置它没有效果。我尝试更改ProgressBar的宽度,但没有成功。
我该怎么办?
编辑:这个问题有一个编程解决方案,请参见@mdelolmo的回复。

4
layout_gravity在appcompat 21.0.2中运作良好。 - Philio
太棒了!你应该把它作为一个答案。 - doplumi
当我遇到和你一样的问题时,我发现了这个页面。layout_gravity确实是答案。我的问题,也可能是你的问题,是Android Studio自动完成声称没有layout_gravity,但如果你自己输入它,它就会找到它。 - Gober
3个回答

38

你可以尝试这个。对我有用的关键在于在xml中定义layout_gravityandroid:layout_gravity="right"

<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="wrap_content"
android:background="@color/material_green_500"
android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

<!-- Color is Brown 500 -->
<ProgressBar
    android:id="@+id/toolbar_progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminateTint="#795548"
    android:indeterminateTintMode="src_in"
    android:layout_gravity="right"
/>

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

5
为了支持从右到左的阅读习惯,建议使用layout_gravity="end"属性。但需要注意的是,该属性仅在API 17及以上版本中可用。 - bryant1410

14

我也遇到了同样的问题,但通过编程它可以解决:

    Toolbar.LayoutParams layoutParams = new Toolbar.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            Gravity.TOP | Gravity.RIGHT);

在我的代码片段中,我将其与顶部对齐,以匹配菜单的对齐方式。


-4
一个在xml中完全创建布局的解决方法是用自己的相对布局替换工具栏内容。为此,您需要伪造活动标题(如果使用导航图标,则还需要伪造导航图标),这实际上是将以下内容嵌套在您的Toolbar块中。
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/toolbar_height"
        android:paddingRight="2dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="@string/app_name"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:fontFamily="sans-serif-medium" />

        <ProgressBar
            android:id="@+id/toolbar_progress_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminateTint="#795548"
            android:indeterminateTintMode="src_in" />

</RelativeLayout>

请注意,20sp sans-serif-medium 是棒棒糖工具栏中使用的字体,您可能需要调整文本视图参数以使其在早期版本中看起来自然。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接