在我的Android应用程序中,我希望标准/基本标题栏更改颜色。
要更改您拥有的文本颜色setTitleColor(int color)
,是否可以更改条形的背景颜色?
在我的Android应用程序中,我希望标准/基本标题栏更改颜色。
要更改您拥有的文本颜色setTitleColor(int color)
,是否可以更改条形的背景颜色?
Answers:
该线程将使您开始在xml文件中构建自己的标题栏并在活动中使用它
编辑
这是上面链接内容的简要摘要-这只是为了设置文本的颜色和标题栏的背景-无需调整大小,没有按钮,只是最简单的示例
res / layout / mytitle.xml-这是代表标题栏的视图
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTitle"
android:text="This is my new title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/titletextcolor"
/>
res / values / themes.xml-我们要保留默认的android主题,只需要更改标题背景的背景色即可。因此,我们创建一个继承默认主题的主题,并将背景样式设置为我们自己的样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="customTheme" parent="android:Theme">
<item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
</style>
</resources>
res / values / styles.xml-在此处设置主题以使用想要的标题背景颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / colors.xml-在此处设置所需的颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
在AndroidMANIFEST.xml中,在应用程序(对于整个应用程序)或活动(仅此活动)标签中设置主题属性
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
从活动(称为CustomTitleBar):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);
}
感谢您的明确解释,不过,我想通过提出一个链接的问题为您的答案添加更多内容(因为这是我的问题的基础,所以我真的不想写一篇新文章)。
我要在超类中声明标题栏,而我的所有其他活动都是该类别的子项,因此只需更改一次标题栏的颜色即可。我还想添加一个图标并更改栏中的文本。我进行了一些测试,并设法同时更改了一个或另一个,但不能同时更改两者(使用setFeatureDrawable和setTitle)。理想的解决方案当然是按照链接中给出的线程中的说明进行操作,但是正如我在超类中声明的那样,由于setContentView和R.id.myCustomBar中的布局,我有一个问题,因为如果我记得很好,我只能调用一次setContentView ...
编辑 找到我的答案:
对于像我一样喜欢使用超类的人,因为它非常适合在应用程序中的任何地方提供菜单,因此在这里它的作用相同。
只需将其添加到您的超类中即可:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.customtitlebar);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
customTitleText = (TextView) findViewById(R.id.customtitlebar);
(您必须将textview声明为受保护的类变量)
然后,这种功能的强大之处在于,在您应用中的所有位置(例如,如果您所有的活动都是此类的子级),您都只需调用
customTitleText.setText("Whatever you want in title");
,标题栏将被编辑。
在我的案例中,关联的XML是(R.layout.customtitlebar):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
android:background="@color/background" android:padding="3px" />
</LinearLayout>
还有另一种更改背景颜色的方法,但是这是一种技巧,如果更改Window的View层次结构及其标题,则在将来的Android版本上可能会失败。但是,在这种情况下,代码不会崩溃,只需要设置所需的颜色即可。
在您的活动中,像onCreate一样,执行以下操作:
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
}
}
此代码有助于在Android中以编程方式更改标题栏的背景。将颜色更改为所需的任何颜色。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
在上面的代码上,您可以尝试使用标题代替标题栏, 这将影响应用程序中的所有活动
看看platforms/android-2.1/data/res/layout/screen.xml
SDK。似乎在那里定义了标题。您可以经常检查这样的布局并借用
style="?android:attr/windowTitleStyle"
样式,然后在自己的TextView中使用和覆盖样式。
您甚至可以通过以下操作选择标题以进行直接调整:
TextView title = (TextView)findViewById(android.R.id.title);
尝试以下代码
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
也使用此链接非常有用:http : //nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
通过使用Google提供的v7 appcompat支持库,可以更简单地更改标题栏的颜色。
有关如何设置此支持库的信息,请参见以下链接:https : //developer.android.com/tools/support-library/setup.html
完成此操作后,将以下行添加到res / values / styles.xml文件中就足够了:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
(假设在您的res / values / colors.xml中定义了“ titlebackgroundcolor”,例如:
<color name="titlebackgroundcolor">#0000AA</color>
)
自Android 5.0(API级别21)以来,事情似乎变得更好/更容易。
我认为您正在寻找的是这样的:
<style name="AppTheme" parent="AppBaseTheme">
<!-- Top-top notification/status bar color: -->
<!--<item name="colorPrimaryDark">#000000</item>-->
<!-- App bar color: -->
<item name="colorPrimary">#0000FF</item>
</style>
请参阅此处以供参考:
https://developer.android.com/training/material/theme.html#ColorPalette