自定义支持操作栏/ Android

时间:2015-02-15 18:00:05

标签: android android-actionbar

我最近开始使用Android编程,一切都很好,花花公子,但是我遇到了一个我无法找到答案的问题,到目前为止,我真的努力了4天。

我的应用使用支持操作栏,并且具体" android.support.v7.app.ActionBarActivity "。长话短说,我无法处理适用于Action Bar的大部分内容。

我的应用程序默认使用此支持操作栏,因为我的迷你sdk版本设置为14。

我希望能够从头开始构建一个操作栏并自定义它,因为默认操作栏无法响应styles.xml等中的自定义。

我不介意使用Holo主题库而不是AppCompat。

这里的问题是,如何使用操作栏而不是支持操作栏? 如何扩展我的java类而不是支持它?

因为所有在线自定义解决方案都不适用于支持操作栏。

有点模糊的描述,所以我为此道歉。

2 个答案:

答案 0 :(得分:2)

创建一个新项目,并选择最低API级别为15.当您执行此操作时,此项目不需要appcompat-v7库,因为它适用于minSdkversion< 15.在此项目中,默认情况下将使用类android.app.ActionBarActivityandroid.app.ActionBar,即本机AOSP类,而不是支持库中的类。

以下内容可让您在API级别8及以上版本中拥有自定义背景色的ActionBar

第1步。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,使用十六进制颜色代码作为您希望在ActionBar中使用的背景颜色。

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

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

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

到每个ActionBar声明。

试试这个。它会起作用。

答案 1 :(得分:2)

Zygotelnit答案有效但你必须从项目声明中省略[&#34; tools:targetApi =&#34; 11&#34;]否则它会因某些原因给你一个错误。

另一方面,我发现了一个更短,更简单但不那么优化的解决方案。虽然搜索actionBar类并在这里玩,但答案是:

  1. 在您的activity.java中,转到

    protected void onCreate(Bundle savedInstanceState)
    
  2. 在该方法中适当的任何地方,编写以下代码:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setBackgroundDrawable(new  
    ColorDrawable(Color.parseColor("#D62D20")));
    
  3. 您可以使用您选择的任何颜色代码替换颜色代码。它显然是一个十六进制颜色代码。