Android 4.3中的自定义ActionBar文本外观
我用以下代码自定义了我的应用程序标题在操作栏上的外观Android 4.3中的自定义ActionBar文本外观,android,android-actionbar,Android,Android Actionbar,我用以下代码自定义了我的应用程序标题在操作栏上的外观 <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> <item name="android:textColor">#ff2d2d2d</item> <item name="android:textSize">26sp</item> <item name=
<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>
#FF2D2D
26便士
无衬线压缩
真的
大胆的
无论如何,在我测试过的大多数设备中,一切都很正常(精确地说是3台),但对于1台,运行安卓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>
@style/mysteme.ActionBar
@样式/机器人文本视图样式
@样式/机器人按钮样式
@可绘制/应用主题\编辑\文本\全息\暗
@可绘图/导航列表选择器
无衬线灯
无衬线灯
@style/mysteme.ActionBar.Text
@可拉拔/动作杆
搜寻
@可绘制/应用主题\编辑\文本\全息\暗
#FF2D2D
26便士
无衬线压缩
真的
大胆的
对我来说,这就像一个符咒。
让我们为动作栏创建一个自定义视图
res/layout/action\u title\u 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>
现在覆盖活动的setTitle方法
@Override
public void setTitle(CharSequence title) {
mTitle = title;
((TextView) mCustomActionView.findViewById(R.id.title)).setText(mTitle);
getActionBar().setTitle("");
}
使用setTitle方法设置自定义操作栏文本。希望这有帮助。当我读到这篇文章时,我想到的第一件事是,您可能正在使用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>
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/Red</item>
@颜色/白色
在values-v14中,我有一个样式设置为红色文本颜色:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/White</item>
<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没有文本颜色的引用,则将使用values-v14)
在您的情况下,应该有一个values-v17(jellybean和更高版本)包含您引用的样式,如果较低api级别的设备尝试访问该样式,它将不会出现在样式文件夹中,它们将不会使用较高api级别的资源
我并不是说这是您的问题的原因,这只是一个猜测,因为您没有提供有关样式版本控制的信息。此外,由于Jelly Bean 4.3及更高版本可以工作,您可能会参考Api级别17中添加的功能,这有什么问题?或者我们应该猜猜你遇到了什么麻烦?屏幕截图或类似的东西会很有帮助。@Ahmad没有应用这种风格。这还不够明显吗?不,这还不够明显。它可能是,只有一部分没有或被应用。然而。设备运行的Android版本是什么?它在哪工作?@Ahmad你说得有道理,我道歉。它在4.2.2、4.1.2和4.4.2中起作用。我将很快发布屏幕截图来支持这个问题。这确实很奇怪。这会为我生成一个错误
没有资源文件匹配给定的名称:
@Olayinka-你是对的。我已经更新了我的ans。请重试。这不就是将同一主题放在support-v11文件夹中吗??还是我遗漏了什么?我通常会为不同的api级别放置不同的文件,cz它们有不同的属性,并且每次都有效。如果我可以问的话,为什么这一个是11?其间,我尝试了,但仍然得到了相同的结果。问题是我根本没有使用样式版本控制。我有一个values文件夹,它是values
。我的最低sdk是16。在这种情况下,我的答案与你无关。我将把我的问题留给遇到这个问题的其他用户。