ActionBar Sherlock样式设计

5

我正在尝试自定义我的Sherlock Action Bar,但是我在style.xml中编写的代码都没有被识别。

在我的清单文件中:

 android:theme="@style/Theme.Sherlock"

我的style.xml文件:

<resources>
<style name="Theme.MyAppTheme" parent="Theme.Sherlock">
    <item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>
</style>

<style name="Theme.MyAppTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="android:background">#222222</item>
    <item name="android:height">64dip</item>
    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
    <item name="android:textColor">#fff</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">32sp</item>
</style>

我这样调用我的ActionBar:

public class MainActivity extends SherlockActivity {

 com.actionbarsherlock.app.ActionBar actionbar;

 ...

 actionbar = getSupportActionBar();

 ... }

显示ActionBar没有问题,但是在style.xml中编写的自定义内容却没有显示出来,有人可以帮助我吗?谢谢。


我在这里做类似的事情!!! https://dev59.com/7HjZa4cB1Zd3GeqPeHTt - Etienne Lawlor
3个回答

8
因为您在清单文件中应用了相同的原始样式android:theme="@style/Theme.Sherlock",这不会产生任何区别。您已经准备好了一个名为Theme.MyAppTheme的自定义样式,其父样式为Theme.Sherlock。因此,您需要在清单文件中声明您的自定义样式(Theme.MyAppTheme),如下所示:android:theme="@style/Theme.MyAppTheme"。甚至您还需要包括没有android前缀的属性,就像下面的其他回答者也说的那样。希望这可以帮助您。您还可以参考这里
 <style name="Theme.MyAppTheme" parent="Theme.Sherlock.Light">
            <item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>
        <item name="actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>        
    </style>

    <style name="Theme.MyAppTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="android:background">#222222</item>
    <item name = "background">#222222</item> 
    <item name="android:height">64dip</item>
     <item name="height">64dip</item>

    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
<item name="titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
        <item name="android:textColor">#fff</item>
        <item name="textColor">#fff</item>
        <item name="android:textStyle">bold</item>
        <item name="textStyle">bold</item>
        <item name="android:textSize">32sp</item>
        <item name="textSize">32sp</item>
 </style>

@Appu有没有办法让这个适用于最低SDK版本为8的应用程序? - pepela
@pepela 显然它运行在版本8上。它可以在Android 2.x及以上版本上运行。您可以在这里进行确认,即minSdkVersion为7,因此它甚至可以在7上运行。希望您的疑问得到了解决。 - Kanth
@Appu 写了这个错误 android:actionBarStyle 需要API等级11(当前最低是8) - pepela
@pepela,你的项目中没有包含actionBarSherlock库,是吗?因为如果它显示这个错误,那么它会警告关于API级别11提供的原始操作栏。 - Kanth

3

0

这个:

<item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>

这是针对默认的ActionBar,注意要加上 'android:'。 你需要像这样设置样式:

     <resources>
    <style name="Theme.MyAppTheme" parent="Theme.Sherlock">
        <item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>
        <item name="actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>

    </style>

    <style name="Theme.MyAppTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
        <item name="android:background">#222222</item>
        <item name="android:height">64dip</item>
        <item name="background">#222222</item>
        <item name="height">64dip</item>
        <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
    </style>

    <style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
        <item name="android:textColor">#fff</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textSize">32sp</item>
        <item name="textColor">#fff</item>
        <item name="textStyle">bold</item>
        <item name="textSize">32sp</item>
    </style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接