私のAndroidアプリケーションでは、標準/基本のタイトルバーの色を変更したいと考えています。
あなたが持っているテキストの色を変更するにsetTitleColor(int color)
は、バーの背景色を変更する方法はありますか?
私のAndroidアプリケーションでは、標準/基本のタイトルバーの色を変更したいと考えています。
あなたが持っているテキストの色を変更するにsetTitleColor(int color)
は、バーの背景色を変更する方法はありますか?
回答:
このスレッドは、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を1回だけ呼び出すことです...
編集 私の答えが見つかりました:
私のように、アプリのどこでもメニューを利用できるようにするのに最適なスーパークラスで作業したい場合は、ここでも同じように機能します。
これをスーパークラスに追加するだけです:
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>
背景色を変更する別の方法がありますが、これはハックであり、ウィンドウのビュー階層とそのタイトルが変更された場合、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);
}
}
上記のコードで、あなたが使用することができますしようとすることができ、タイトルの代わりに、タイトルバー アプリケーション内のすべての活動に影響します、これを
いいえ。タイトルのないアクティビティを作成し、アクティビティレイアウトで独自のタイトルバーを作成できます。
これを確認してください、63行目以下:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
デフォルトのタイトルビューの代わりにカスタムビューを設定します。
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>
(「titlebackgroundcolor」がres / values / colors.xmlで定義されていると仮定します。例:
<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