如何为Android应用程序设计自定义操作栏

时间:2014-06-14 10:42:56

标签: android-actionbar

我要在我的应用中设计这样的操作栏

enter image description here

我该怎么办?

2 个答案:

答案 0 :(得分:1)

第1步。制作如下的XML布局:

<强> my_custom_actionbar_layout.xml

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

    <Button
        android:id="@+id/back_button"
        android:background="darkgreen"
        android:text = "Back"
        android:textColor = "#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />

    <TextView
        android:id="@+id/center_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Place"
        android:textSize="20sp"
        android:textColor="#FFFFFF" />

    <Button
        android:id="@+id/map_button"
        android:background="darkgreen"
        android:text = "Map"
        android:textColor = "#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

在上面的布局中,您必须为要使用的深绿色指定十六进制颜色代码(即在android:background="darkgreen"中必须用所需的十六进制颜色代码替换darkgreen)。 ActionBar的背景颜色将在下面指定。

第2步。在所有onCreate()课程的ActionBarActivity中,输入以下代码:

android.support.v7.app.ActionBar actionBar = getSupportActionBar();

actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);

ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,     ActionBar.LayoutParams.MATCH_PARENT);
View actionBarView = LayoutInflater.from(this).inflate(R.layout.my_custom_actionbar_layout, null); 
actionBar.setCustomView(actionBarView, lp);

注意:如果您仅支持API级别11+,因此使用Activity代替ActionBarActivity,则在上面的代码中替换:

android.support.v7.app.ActionBar actionBar = getSupportActionBar();

android.app.ActionBar actionBar = getActionBar();

第3步。将以下代码添加到您的所有Activity课程中:

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    return false;
}

第4步。res/values文件夹中,定义XML文件theme.xml并将以下内容添加到其中:

<resources  
    xmlns:tools="http://schemas.android.com/tools">

    <style name="DefaultActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item> 
        <item name="actionBarStyle">@style/MyActionBar</item> 
        <item name="android:actionBarSize" tools:targetApi="11">@dimen/action_bar_wrap_content</item> 
        <item name="actionBarSize">@dimen/action_bar_wrap_content</item> 
    </style>

    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
        <item name="android:background" tools:targetApi="11">@color/actionbarbgcolor</item> 
        <item name="background">@color/actionbarbgcolor</item>
        <item name="android:height" tools:targetApi="11">@dimen/action_bar_wrap_content</item>
        <item name="height">@dimen/action_bar_wrap_content</item>
    </style>

</resources>

在同一文件夹中创建另一个XML文件colors.xml并将以下内容添加到其中:

<resources>
    <color
        name="actionbarbgcolor">#00FF00
    </color>
</resources>

和现有文件dimens.xml,添加最后一行:

<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>

    <!-- Optional, in case you wish to increase the default width of the Action Bar. -->
    <dimen name="action_bar_wrap_content">55dp</dimen>

</resources>

代替上面的#00FF00,使用您在图像中使用的浅绿色的十六进制颜色代码。

注意:如果您使用的是appcompat-v7库,则上述操作将有效。如果没有,那么您将不得不使用其中一个Holo.Light主题而不是AppCompat.Light,并且还会有其他更改。

第5步。在清单文件中,您必须添加:

android:theme="@style/DefaultActionBarTheme"  
如果<activity具有Activity,则

到每个ActionBar声明。

试试这个。它会起作用。

答案 1 :(得分:0)

按照本教程(https://developer.android.com/training/basics/actionbar/styling.html#CustomBackground),您可以使用简单的drawable更改应用程序操作栏的背景。

然后,你也可以添加小部件,以获得与上面相同的结果(旧的iOS设计?)。