我已使用以下代码
在操作栏上自定义了我的应用程序标题的外观<style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
<item name="android:textColor">#ff2d2d2d</item>
<item name="android:textSize">26sp</item>
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textAllCaps">true</item>
<item name="android:textStyle">bold</item>
</style>
无论如何,在我测试过的大多数设备中,一切都运行良好(3个要精确)但是1,运行Android 4.3(Sony Xperia Z)的设备没有应用样式。我后来在运行4.3的模拟器上测试了它并得到了相同的结果。
我有办法解决这个问题吗?
以下是该应用的完整样式
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:actionBarStyle">@style/myTheme.ActionBar</item>
<!-- Customize your theme here. -->
<item name="android:textViewStyle">@style/RobotoTextViewStyle</item>
<item name="android:buttonStyle">@style/RobotoButtonStyle</item>
<item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item>
<item name="android:actionBarItemBackground">@drawable/nav_list_selector</item>
</style>
<style name="RobotoTextViewStyle" parent="android:Widget.TextView">
<item name="android:fontFamily">sans-serif-light</item>
</style>
<style name="RobotoButtonStyle" parent="android:Widget.Holo.Button">
<item name="android:fontFamily">sans-serif-light</item>
</style>
<style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
<item name="android:background">@drawable/action_bar_bg</item>
<item name="android:searchButtonText">SEARCH</item>
<item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item>
</style>
<style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
<item name="android:textColor">#ff2d2d2d</item>
<item name="android:textSize">26sp</item>
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textAllCaps">true</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
答案 0 :(得分:4)
对我而言,这就像一个魅力。 让我们为行动栏制作一个自定义视图
RES /布局/ action_title_view.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:ellipsize="end"
android:maxLines="1"
android:text=""
android:textAllCaps="true"
android:textSize="16sp"
android:textColor="@color/actionbar_text" />
</RelativeLayout>
在活动onCreate
中设置自定义操作栏@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set action bar custom view
getActionBar().setDisplayShowCustomEnabled(true);
getActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflator = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mCustomActionView = inflator.inflate(R.layout.action_title_view, null);
// assign the view to the actionbar
getActionBar().setCustomView(mCustomActionView);
...
}
现在覆盖活动的setTitle方法
@Override
public void setTitle(CharSequence title) {
mTitle = title;
((TextView) mCustomActionView.findViewById(R.id.title)).setText(mTitle);
getActionBar().setTitle("");
}
使用setTitle方法设置自定义操作栏文本。希望这会有所帮助。
答案 1 :(得分:1)
我在阅读这篇文章时首先想到的是,您可能正在使用 values-v 文件夹为每个API版本使用不同的资源。
一个小例子: 在常规值文件夹中,我将文本颜色设置为蓝色:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/Blue</item>
在values-v11中,我有一个样式设置为白色文本颜色:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/White</item>
在values-v14中,我有一个样式用红色设置文本颜色:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/Red</item>
现在,(您可能已经猜到了),取决于您的设备的api级别,使用该样式。因此,如果您在API级别13上运行此代码,则文本颜色将为白色。对于低于11的每个api级别,使用蓝色。
现在还有另外一件事,如果您正在使用的SDK的values-v文件夹中没有样式/资源,则会提到第二个最佳替代方案(因此,如果values-v16没有引用文本颜色,将使用值-v14。
在你的情况下,应该有一个值-v17(Jelly Bean,up)包含你引用的样式,如果较低的api级别设备尝试访问该样式,它将不会出现在样式文件夹中,他们不会使用更高Api级别的资源。
我不是说这是你问题的原因,这只是猜测,因为你没有提供关于样式版本控制的信息。此外,由于Jelly Bean 4.3及以上版本可以正常工作,因此您可能会参考在Api等级17中添加的功能