适用于Android的自定义操作栏/标题

时间:2013-08-21 07:49:23

标签: android header android-actionbar customization

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

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版本无法实现,则使用硬件按钮激活是没有问题的。 提前谢谢!

4 个答案:

答案 0 :(得分:1)

这不实用,可能不推荐,但我所做的是使用以下方法在Android Manifest中隐藏动作栏/头部:

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

然后,在我的activity的布局xml文件中,我只是自定义构建一个看起来像actionbar / header的标题。以下是我的某个应用中的示例:

enter image description here

这完全在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>

答案 1 :(得分:1)

这是评论中对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" />

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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