Android
Tema, stile, attributo
Ricerca…
Usa il tema personalizzato a livello globale
In themes.xml:
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
In AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Activity declarations here -->
</application>
Definisci colori primari, scuri primari e accenti
È possibile personalizzare la tavolozza dei colori del tema .
Utilizzo delle API framework
<style name="AppTheme" parent="Theme.Material">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<item name="android:colorAccent">@color/accent</item>
</style>
Utilizzo della libreria di supporto Appcompat (e AppCompatActivity
)
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
Usa tema personalizzato per attività
In themes.xml:
<style name="MyActivityTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
In AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
<activity
android:name=".MyActivity"
android:theme="@style/MyActivityTheme" />
</application>
Overscroll Color (API 21+)
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorEdgeEffect">@color/my_color</item>
</style>
Ripple Color (API 21+)
L'animazione ripple viene mostrata quando l'utente preme viste cliccabili.
Puoi utilizzare lo stesso colore di ripple utilizzato dalla tua app che assegna il ?android:colorControlHighlight
nelle tue visualizzazioni. Puoi personalizzare questo colore modificando l'attributo android:colorControlHighlight
nel tuo tema:
Questo colore dell'effetto può essere cambiato:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorControlHighlight">@color/my_color</item>
</style>
Oppure, se stai usando un tema materiale:
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">@color/your_custom_color</item>
</style>
Light Status Bar (API 23+)
Questo attributo può cambiare lo sfondo delle icone della barra di stato (nella parte superiore dello schermo) in bianco.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowLightStatusBar">true</item>
</style>
Navigazione traslucida e barre di stato (API 19+)
La barra di navigazione (nella parte inferiore dello schermo) può essere trasparente. Ecco il modo per raggiungerlo.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentNavigation">true</item>
</style>
La barra di stato (in alto sullo schermo) può essere resa trasparente, applicando questo attributo allo stile:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentStatus">true</item>
</style>
Colore barra di navigazione (API 21+)
Questo attributo viene utilizzato per modificare la barra di navigazione (una, che contiene il pulsante Indietro, Home recenti). Di solito è nero, tuttavia è possibile cambiare il colore.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:navigationBarColor">@color/my_color</item>
</style>
Eredità tematica
Quando si definiscono temi, in genere si utilizza il tema fornito dal sistema, quindi le modifiche modificano l'aspetto per adattarlo alla propria applicazione. Ad esempio, questo è il modo in cui il tema Theme.AppCompat
è ereditato:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Questo tema ora ha tutte le proprietà del tema Theme.AppCompat
standard, ad eccezione di quelli che abbiamo modificato in modo esplicito.
C'è anche una scorciatoia quando si eredita, di solito usata quando si eredita dal proprio tema:
<style name="AppTheme.Red">
<item name="colorAccent">@color/red</item>
</style>
Dal momento che ha già AppTheme.
all'inizio del suo nome, lo eredita automaticamente, senza dover definire il tema parent
. Ciò è utile quando devi creare stili specifici per una parte (ad esempio, una singola attività) della tua app.
Temi multipli in un'unica app
Utilizzando più di un tema nella tua applicazione Android, puoi aggiungere colori personalizzati a ogni tema, per essere così:
Innanzitutto, dobbiamo aggiungere i nostri temi a style.xml
questo modo:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<!-- -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
</style>
......
Sopra puoi vedere OneTheme e TwoTheme .
Ora vai sul tuo AndroidManifest.xml
e aggiungi questa linea: android:theme="@style/OneTheme"
al tag dell'applicazione , questo renderà OneTheme il tema predefinito:
<application
android:theme="@style/OneTheme"
...>
Crea un nuovo file xml chiamato attrs.xml
e aggiungi questo codice:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="custom_red" format="color" />
<attr name="custom_blue" format="color" />
<attr name="custom_green" format="color" />
</resources>
<!-- add all colors you need (just color's name) -->
Torna a style.xml
e aggiungi questi colori con i relativi valori per ciascun tema:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="custom_red">#8b030c</item>
<item name="custom_blue">#0f1b8b</item>
<item name="custom_green">#1c7806</item>
</style>
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
<item name="custom_red">#ff606b</item>
<item name="custom_blue">#99cfff</item>
<item name="custom_green">#62e642</item>
</style>
Ora hai colori personalizzati per ogni tema, aggiungiamo questi colori alle nostre visualizzazioni.
Aggiungi custom_blue color a TextView usando "? Attr /":
Vai alla tua imageView e aggiungi questo colore:
<TextView>
android:id="@+id/txte_view"
android:textColor="?attr/custom_blue" />
Mow possiamo cambiare il tema solo con la singola riga setTheme(R.style.TwoTheme);
questa linea deve essere prima del metodo setContentView()
nel metodo onCreate()
, come questo Activity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.TwoTheme);
setContentView(R.layout.main_activity);
....
}
cambia tema per tutte le attività contemporaneamente
Se vogliamo cambiare il tema per tutte le attività, dobbiamo creare una nuova classe denominata MyActivity estende la classe AppCompatActivity
(o la classe Activity
) e aggiunge line setTheme(R.style.TwoTheme);
al metodo onCreate () :
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (new MySettings(this).isDarkTheme())
setTheme(R.style.TwoTheme);
}
}
Infine, vai a tutte le tue attività aggiungi fai in modo che tutti estendano la classe base MyActivity :
public class MainActivity extends MyActivity {
....
}
Per cambiare il tema, vai su MyActivity e modifica R.style.TwoTheme
sul tema ( R.style.OneTheme
, R.style.ThreeTheme
....).