Android ActionBar 自定义布局样式

Posted

技术标签:

【中文标题】Android ActionBar 自定义布局样式【英文标题】:Android ActionBar custom layout styling 【发布时间】:2014-01-25 04:14:20 【问题描述】:

我刚刚开始从 ios 开发 android 并再次遇到问题。 经过 1 天的尝试,我决定向堆栈溢出的人询问。

所以我的问题:

我有一个应用程序,在操作栏中(默认没有 sherlock)我想要 1 个徽标和 2 行文本。 通过互联网,我为操作栏找到了 setCustomView。 并且自定义 xml 已加载,但我无法正确布局。

所以首先我设置了操作栏:

private void setupActionBar() 
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);

    LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    View customNav = LayoutInflater.from(this).inflate(R.layout.actionbar, null); // layout which contains your button.

    actionBar.setCustomView(customNav, lp1);

比xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_gravity="fill_horizontal"
    android:orientation="horizontal"
    android:background="@color/Blue">

    <TextView
        android:id="@+id/text_left"
        android:layout_
        android:layout_
        android:text="@string/title_menu"
        android:textColor="@color/White"
        android:paddingLeft="5dp"
        android:layout_gravity="left"/>

    <ImageView
        android:id="@+id/icon"
        android:layout_
        android:layout_
        android:src="@drawable/Icon"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/text_right"
        android:layout_
        android:layout_
        android:text="@string/title_help"
        android:layout_gravity="right"
        android:textColor="@color/White"
        android:paddingRight="5dp"/>

</LinearLayout>

但结果是我不想要的:

那么我忘记/做错了什么/或者我应该做什么?

【问题讨论】:

【参考方案1】:

尝试将根布局改为相对布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_gravity="fill_horizontal"
android:orientation="horizontal">

<TextView
    android:text="left text"
    android:layout_toLeftOf="@+id/icon"
    android:layout_alignParentLeft="true"
    android:id="@+id/text_left"
    android:gravity="left"
    android:layout_
    android:layout_
    android:paddingLeft="5dp"/>

<ImageView
    android:layout_centerHorizontal="true"
    android:id="@+id/icon"
    android:layout_
    android:layout_
    android:src="@drawable/bg_sunrise"
    android:layout_gravity="center"/>

<TextView
    android:text="Right txt"
    android:layout_toRightOf="@+id/icon"
    android:id="@+id/text_right"
    android:layout_
    android:gravity="right"
    android:layout_
    android:layout_gravity="right"
    android:paddingRight="5dp"/> </RelativeLayout>

【讨论】:

我爱你,我用了 1 天就完成了。现在我可以继续了。谢谢 谢谢,这很有用。如果您需要不同的布局,请始终使用 RelativeLayout 作为根!【参考方案2】:

你没有得到你的结果,因为:

你需要:

    如果你使用 AppCompat 主题

    添加到您的活动布局

    在代码中,例如。在 onCreate() 中设置一个工具栏来替换操作栏。

【讨论】:

绝对疯子,截取了代码。感谢您的帮助【参考方案3】:

您也可以使用 LinearLayout 作为根并添加 android:weightSum 并在三个子视图上指定 layout_weight。

What is android:weightSum in android, and how does it work?

【讨论】:

以上是关于Android ActionBar 自定义布局样式的主要内容,如果未能解决你的问题,请参考以下文章

自定义ActionBar

自定义组合控件

如何在 ActionBar 中显示自定义视图?

android布局文件里的ProgressBar长形进度条怎么自定义样式

android中怎么将actionbar设置为居中

Android开发学习之路--UI之自定义布局和控件