Diciamo che voglio che tutte le TextViewistanze nella mia app abbiano textColor="#ffffff". C'è un modo per impostarlo in un posto invece di impostarlo per ciascuno TextView?
Diciamo che voglio che tutte le TextViewistanze nella mia app abbiano textColor="#ffffff". C'è un modo per impostarlo in un posto invece di impostarlo per ciascuno TextView?
Risposte:
In realtà, puoi impostare uno stile predefinito per TextViews (e la maggior parte degli altri widget incorporati) senza la necessità di eseguire una classe java personalizzata o impostare lo stile individualmente.
Se dai un'occhiata themes.xmlal sorgente Android, vedrai una serie di attributi per lo stile predefinito per vari widget. La chiave è l' attributo textViewStyle(o editTextStyle, ecc.) Che sovrascrivi nel tuo tema personalizzato. Puoi sovrascriverli nel modo seguente:
Crea un 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>
Quindi applica quel tema alla tua applicazione in AndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
E tutte le visualizzazioni del testo verranno impostate sullo stile definito in MyTextViewStyle(in questo caso, grassetto e rosso)!
Questo è stato testato su dispositivi dal livello API 4 in poi e sembra funzionare alla grande.
<item name="android:textViewStyle">@style/MyTextViewStyle</item>nello stile MyTheme e poi applico lo stile alla mia applicazione, tutti i miei TextViewverranno visualizzati in base allo stile (anche il nome dell'applicazione nella barra delle azioni). Come risolvere il problema con la barra delle azioni? Voglio che abbia l'aspetto predefinito. Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>anche lì, semplicemente indicando l'impostazione predefinita di ActionBar (o qualcosa di simile)
Ci sono due modi per farlo:
È possibile definire i propri stili creando file XML nella res/valuesdirectory. Quindi, supponiamo che tu voglia avere un testo rosso e in grassetto, quindi crei un file con questo contenuto:
<?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>
Puoi nominarlo come vuoi, per esempio res/values/red.xml. Quindi, l'unica cosa che devi fare è utilizzare quella vista nei widget che desideri, ad esempio:
<?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>
Per ulteriore riferimento, puoi leggere questo articolo: Comprensione di temi e stili Android
Questo è un altro modo possibile per ottenere ciò, e sarebbe quello di fornire il tuo TextViewche imposta il colore del testo sempre su quello che vuoi; per esempio:
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);
}
}
Quindi, devi solo trattarlo come una normale TextViewnel tuo file 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"
>
<org.example.RedTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
Se usi l'una o l'altra scelta dipende dalle tue esigenze. Se l'unica cosa che vuoi fare è modificare l'aspetto, l'approccio migliore è il primo. D'altra parte, se vuoi cambiare l'aspetto e aggiungere alcune nuove funzionalità ai tuoi widget, la seconda è la strada da percorrere.
custom_view_layout.xmlfile che viene utilizzato per gonfiare una classe personalizzata?
Per il colore predefinito del testo TextView, imposta android:textColorTertiarynel tema il colore desiderato:
<item name="android:textColorTertiary">@color/your_text_color</item>
Molti altri colori del controllo Android possono essere controllati utilizzando attributi del framework o supportano gli attributi della libreria se si utilizza la libreria di supporto.
Per un elenco degli attributi che è possibile impostare, controllare Android il codice sorgente di styles.xmle themes.xml, o questo molto utile succo di Dan Lew, provare a cambiare ogni valore e vedere che cosa cambiano sullo schermo.