【问题标题】:Custom action bar / header for Android适用于 Android 的自定义操作栏/标题
【发布时间】:2013-08-21 07:49:22
【问题描述】:

我正在尝试创建一个自定义标题,但我不知道如何去做。我一直在研究,但我总是遇到我的日食不会有的风格和东西的问题。 问题是我想要一些非常简单的东西。

Android 4.2.2 中的屏幕会是这样的:

http://imageshack.us/a/img838/8840/89ur.png

我认为这是 Android SDK 11 等的默认标头。我一直在测试它更改清单 android:targetSdkVersion 并且我的手机应用程序的外观发生了变化。

问题在于不同 Android 版本之间的兼容性。我已经看到该应用在不同的设备上运行,结果如下:

在 Android 4.0.4 中

http://imageshack.us/a/img600/6246/rdhl.png

在 Android 2.3.6 中

http://imageshack.us/a/img836/1599/ezit.png

您可以注意到标题甚至颜色和形状如何变化。 如果我创建一个自定义标头,它会在每个设备中以相同的方式显示还是取决于 Android 版本?

我想为每台设备制作一个唯一版本的应用程序,可以吗? 如果可能的话,我想要第一张图片的下一个标题,并且在红色矩形内我想插入一个图像。如果我可以将选项菜单(黄色方块)保留在那里,那就更好了。如果由于Android版本的原因无法使用,使用硬件按钮激活是没有问题的。 提前致谢!

【问题讨论】:

  • 在这种情况下,我会选择在 XML 文件中实现为线性布局的自定义操作栏,并将其包含在 标记中。
  • @DídacPérez 我该怎么做?

标签: android header android-actionbar customization


【解决方案1】:

这不实用,可能不推荐,但我所做的是我在 Android 清单中完全隐藏了操作栏/头部:

    <activity
        android:name=".My_Activity_Name"
        android:theme="@android:style/Theme.NoTitleBar" />

然后,在我的活动布局 xml 文件中,我只是自定义构建了一个看起来像操作栏/标题的标题。这是我的一个应用程序中的一个示例:

这完全在 xml 文件中完成,但它看起来与正确的操作栏/标题一样真实。

编辑

这是我的导航栏 xml 布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:background="@drawable/navbar_topxml"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="55dp"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:gravity="center" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_back"
            android:onClick="nav_back" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="0.99"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tab_style"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical"
            android:paddingLeft="5dp"
            android:text="TITLE"
            android:textColor="#888888"
            android:textStyle="bold"
            android:textSize="20sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:gravity="center"
        android:paddingLeft="20dp"
        android:paddingRight="10dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:gravity="center" >
            <ImageView
                android:id="@+id/todo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/todo_off"
                android:onClick="todo_toggle" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="10dp"
            android:layout_height="fill_parent"
            android:orientation="horizontal" >
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:gravity="center" >
            <ImageView
                android:id="@+id/favourite"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/fav_off"
                android:onClick="fav_toggle" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="10dp"
            android:layout_height="fill_parent"
            android:orientation="horizontal" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:gravity="center" >
            <ImageView
                android:id="@+id/done"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/done_off"
                android:onClick="done_toggle" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
</LinearLayout>

【讨论】:

  • 太棒了!非常有用!
【解决方案2】:

这是对评论中n4h1n'问题的回复。

layout_action_bar.xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="46dp"
    android:orientation="horizontal" >

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5" >

        <ImageView
            android:id="@+id/imageSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/search" />

    </FrameLayout>

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6" >

        <TextView
            android:id="@+id/textTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textSize="24sp"
            android:textColor="#FF9C00"
            android:text="@string/turipolis" />

    </FrameLayout>

    <FrameLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5" >

        <ImageView
            android:id="@+id/imageUser"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/user" />

    </FrameLayout>

</LinearLayout>

<View
    android:layout_width="fill_parent"
    android:layout_height="8dp"
    android:background="@drawable/action_bar_shadow" />

在您的活动 XML 中:

<include
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    layout="@layout/layout_action_bar" />

【讨论】:

  • 我应该在我的活动的哪一部分中包含 ?我得到了标题的图像,但位置不正确
  • 就我而言,我的整个活动是一个垂直水平布局,所以我把 include 作为布局的第一个元素。
【解决方案3】:

我会认真推荐 ActionBarSherlock,http://actionbarsherlock.com/。这真的是一个很棒的图书馆。你可以在这里http://actionbarsherlock.com/download.html找到它的一些代码演示,在https://github.com/JakeWharton/ActionBarSherlock/tree/master/actionbarsherlock-samples这里找到它们的源代码

不过,我确实记得 google 曾在 http://developer.android.com/tools/support-library/index.html 处宣布他们已在其支持库中将 ActionBar 向后移植到 2.1。在您计划使用它而不是扩展普通 Activity 类的活动中,您将扩展 ActionBarActivity 类。同样的逻辑在某种程度上适用于 ActionBarSherlock,因为您将扩展 SherlockActivity

【讨论】:

  • 没错,很多开发人员都使用 ActionBarSherlock,但是,正如 Adam 所说:'添加了 ActionBar 以允许将操作栏用户界面设计模式实现回 Android 2.1(API 级别 7)及更高版本。使用此类需要您通过扩展新的 ActionBarActivity 类来实现您的活动。'
【解决方案4】:

我要做的只是在你的清单中设置一个没有标题栏的主题,并在你的 XML 文件中包含一个自定义布局文件,即你的标题栏。这确保它在每个版本中都是相同的。它的好处是你可以做任何事情。

【讨论】:

  • 我该怎么做呢?我见过类似的东西,我试过了,但标题栏不会出现。如果我用我的标题栏设置此布局,选项菜单将消失,我将无法将其包含在选项按钮位于栏中的 Android 版本中。你知道我可以在哪里找到你所说的教程吗?
  • 在下面查看我的答案...它显示了如何在清单中隐藏 TitleBar。然后在活动的 Layout xml 文件中,构建自定义标题栏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多