web-dev-qa-db-ja.com

カスタムテーマを使用してデフォルトのテキストの色を変更する方法

私がしようとしていることはテーマで非常に簡単でなければなりませんが、方法はわかりません:私のアプリではすべてのテキストをデフォルトで白にしたいです。 theme.xmlでカスタムテーマを作成しました。

<style name="Theme" parent="@Android:Theme">
</style>

<style name="TextAppearance.Theme" parent="@Android:TextAppearance.Theme">
    <item name="Android:textColor">#ffffffff</item>
</style>

アプリケーション全体に設定します:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/Theme">

しかし、ラベルはまだ黒です。何が欠けていますか?

PS:ウィジェットごとに適用されるさまざまなテキストサイズのスタイルを追加で定義するにはどうすればよいですか?そのようなものは正しいですか?

<style name="Theme.smallText">
    <item name="Android:textSize">12dp</item>
</style>

update

Android SDKのthemes.xmlを見て、テーマのテキストスタイルを設定する方法を示します。

<item name="textAppearance">@Android:style/TextAppearance</item>

私の場合、この定義で動作するはずです:

<style name="Theme" parent="@Android:Theme">
    <item name="Android:textAppearance">@style/MyText</item>
</style>

<style name="MyText" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

ただし、まだ動作していません。

同じ問題の別の投稿が見つかりました: http://groups.google.com/group/Android-developers/browse_thread/thread/2897ccd0884546b9

54
didi_X8

Manifestで、テキストの色styleを含むitemの名前を参照する必要があります。現在、空のstyleを参照しています。したがって、theme.xmlで次のstyleのみを実行します。

<style name="Theme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

Manifestと同じ(Android:theme="@style/Theme")で参照し続ける

編集

theme.xml:

<style name="MyTheme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
    <item name="Android:textSize">12dp</item>
</style>

マニフェスト:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/MyTheme">

テキストの色とサイズを同じstyleに結合していることに注意してください。また、テーマの名前をMyThemeに変更し、Manifestでテーマを参照しています。そして、parent値を@Android:style/TextAppearanceに変更しました。

51
koopaking3

アプリを作成すると、res/valuesフォルダーにstyles.xmlというファイルが作成されます。スタイルを変更すると、すべてのレイアウトの背景、テキストの色などを変更できます。そうすれば、個々のレイアウトに移動して手動で変更する必要がありません。

styles.xml:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="Theme.AppBaseTheme" parent="@Android:style/Theme.Light">
    <item name="Android:editTextColor">#295055</item> 
    <item name="Android:textColorPrimary">#295055</item>
    <item name="Android:textColorSecondary">#295055</item>
    <item name="Android:textColorTertiary">#295055</item>
    <item name="Android:textColorPrimaryInverse">#295055</item>
    <item name="Android:textColorSecondaryInverse">#295055</item>
    <item name="Android:textColorTertiaryInverse">#295055</item>

     <item name="Android:windowBackground">@drawable/custom_background</item>        
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

parent="@Android:style/Theme.Light"はGoogleのネイティブカラーです。ネイティブスタイルのリファレンスは次のとおりです。 https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

デフォルトのAndroidスタイルは「テーマ」とも呼ばれます。だからあなたはそれをテーマと呼んで、おそらくプログラムを混乱させた。

name="Theme.AppBaseTheme"は、parent="@Android:style/Theme.Light"からすべてのスタイルを継承するスタイルを作成していることを意味します。この部分は、AppBaseThemeから再度継承する場合を除き、無視できます。 = <style name="AppTheme" parent="AppBaseTheme">

@ drawable/custom_backgroundは、Drawableのフォルダーに配置したカスタム画像です。 300x300のpng画像です。

#295055は濃い青色です。

私のコードは背景とテキストの色を変更します。ボタンのテキストについては、Googleのネイティブなスタイル(上記のリンク)をご覧ください。

次に、Androidマニフェストに、忘れずにコードを含めます。

<application
Android:theme="@style/Theme.AppBaseTheme">
41
Gene

アプリのテーマ全体の親として@Android:style/TextAppearanceを使用することはできません。 koopaking3のソリューション がかなり壊れているようです。

カスタムテーマを使用して、アプリ内のすべての場所でデフォルトのテキストの色を変更するには、次のようにします。少なくともAndroid 4.0+(APIレベル14+)で動作します。

res/values/themes.xml

<resources>    
    <style name="MyAppTheme" parent="Android:Theme.Holo.Light">
        <!-- Change default text colour from dark grey to black -->
        <item name="Android:textColor">@Android:color/black</item>
    </style>
</resources>

マニフェスト:

<application
    ...
    Android:theme="@style/MyAppTheme">

更新

上記の欠点は、disabledアクションバーのオーバーフローメニュー項目がグレーアウトではなくデフォルトの色を使用することです。 (もちろん、アプリ内で無効なメニュー項目を使用しない場合、これは重要ではありません。)

私が学んだように この質問をすることで 、より良い方法はdrawableを使用して色を定義することです:

<item name="Android:textColor">@drawable/default_text_color</item>

...別のres/drawable/default_text_color.xml色を指定するstate_enabled="false"付き:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:color="@Android:color/darker_gray"/>
    <item Android:color="@Android:color/black"/>
</selector>
18
Jonik

アクティビティレイアウトがテーマをオーバーライドするかどうかを確認し、layout/*your_activity*.xmlにあるアクティビティレイアウトを探し、TextViewを探しますアクティビティレイアウトにAndroid:textColor="(some hex code")のようなものが含まれているため、削除します。その後、コードを再度実行します。

1
clouu