TextViewアプリのすべてのインスタンスにを割り当てたいとしましょうtextColor="#ffffff"。それぞれに設定するのではなく、1つの場所に設定する方法はありTextViewますか?
TextViewアプリのすべてのインスタンスにを割り当てたいとしましょうtextColor="#ffffff"。それぞれに設定するのではなく、1つの場所に設定する方法はありTextViewますか?
回答:
実際、カスタムJavaクラスを実行したり、スタイルを個別に設定したりすることなく、TextViews(および他のほとんどの組み込みウィジェット)のデフォルトスタイルを設定できます。
あなたが見てみる場合はthemes.xmlAndroidのソースでは、さまざまなウィジェットのデフォルトスタイルの属性の束が表示されます。キーはtextViewStyle(またはeditTextStyleなど)属性であり、カスタムテーマでオーバーライドします。これらは次の方法でオーバーライドできます。
を作成styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
次に、そのテーマをアプリケーションのアプリケーションに適用しますAndroidManifest.xml。
<application […] android:theme="@style/MyTheme">…
そして、すべてのテキストビューはデフォルトで定義されたスタイルMyTextViewStyle(この例では、太字と赤)になります!
これは、APIレベル4以降のデバイスでテストされており、うまく機能しているようです。
<item name="android:textViewStyle">@style/MyTextViewStyle</item>@Steve 、アイテムをスタイルMyTheme に含めてから、アプリケーションにスタイルを適用すると、すべてTextViewのがスタイルに従って表示されます(アクションバーのアプリケーションの名前も含みます)。アクションバーで問題を修正するにはどうすればよいですか?デフォルトの外観にしたい。Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>そこに配置し、ActionBarのデフォルト(または同様の何か)をポイントするだけでよい
これを行うには2つの方法があります。
res/valuesディレクトリにXMLファイルを作成することにより、独自のスタイルを定義できます。したがって、赤と太字のテキストが必要だとすると、次の内容のファイルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRedTheme" parent="android:Theme.Light">
<item name="android:textAppearance">@style/MyRedTextAppearance</item>
</style>
<style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
たとえば、好きな名前を付けることができますres/values/red.xml。次に、必要なことは、たとえば、必要なウィジェットでそのビューを使用することだけです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
style="@style/MyRedTheme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
詳細については、次の記事をご覧ください。 Androidのテーマとスタイルを理解する
これは、これを実現するもう1つの方法でありTextView、テキストの色を常に好きなように設定する独自の方法を提供することになります。例えば:
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
public RedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.RED);
}
}
次に、TextViewXMLファイルでそれを通常の方法で処理する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<org.example.RedTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
どちらを使用するかは、ニーズによって異なります。外観を変更することだけが目的の場合、最善の方法が最初です。一方、外観を変更してウィジェットに新しい機能を追加したい場合は、2番目の方法が適しています。
custom_view_layout.xmlカスタムクラスをインフレートするために使用されるファイルでそれを使用できないのはなぜですか?
のデフォルトのテキストの色については、テーマで目的の色にTextView設定android:textColorTertiaryします。
<item name="android:textColorTertiary">@color/your_text_color</item>
他の多くのAndroidコントロールの色は、フレームワーク属性を使用して制御できます。サポートライブラリを使用している場合は、ライブラリ属性をサポートできます。
設定できる属性のリストについては、Androidソースコードのstyles.xmland themes.xml、またはDan Lewによるこの非常に役立つ要点をチェックして、各値を変更して画面上で何が変更されるかを確認してください。