Android
Tema, stil, attribut
Sök…
Använd anpassat tema globalt
I teman.xml:
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
I AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Activity declarations here -->
</application>
Definiera primära, primära mörka och accentfärger
Du kan anpassa ditt temas färgpalett .
Använda ram- API: er
<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>
Använda Appcompat-supportbiblioteket (och 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>
Använd anpassat tema per aktivitet
I teman.xml:
<style name="MyActivityTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
I 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>
Överskridningsfärg (API 21+)
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorEdgeEffect">@color/my_color</item>
</style>
Ripple Color (API 21+)
Rippelanimeringen visas när användaren trycker på klickbara vyer.
Du kan använda samma krusningsfärg som din app tilldelar ?android:colorControlHighlight
i dina vyer. Du kan anpassa denna färg genom att ändra android:colorControlHighlight
attributet i ditt tema:
Denna effektfärg kan ändras:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorControlHighlight">@color/my_color</item>
</style>
Eller om du använder ett materialtema:
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">@color/your_custom_color</item>
</style>
Ljusstatusfält (API 23+)
Detta attribut kan ändra bakgrunden på ikonerna för statusfältet (längst upp på skärmen) till vitt.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowLightStatusBar">true</item>
</style>
Genomskinliga navigerings- och statusfält (API 19+)
Navigeringsfältet (längst ner på skärmen) kan vara transparent. Här är sättet att uppnå det.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentNavigation">true</item>
</style>
Statusfältet (överst på skärmen) kan göras öppet genom att tillämpa detta attribut på stilen:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentStatus">true</item>
</style>
Navigationsfärgsfärg (API 21+)
Detta attribut används för att ändra navigeringsfältet (ett, som innehåller knappen Tillbaka, Hem senaste). Vanligtvis är den svart, men färgen kan ändras.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:navigationBarColor">@color/my_color</item>
</style>
Teman arv
När man definierar teman använder man vanligtvis det tema som tillhandahålls av systemet och ändrar sedan utseendet så att det passar sin egen applikation. Till exempel är detta hur Theme.AppCompat
temat ärvs:
<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>
Detta tema har nu alla egenskaper standard Theme.AppCompat
tema, utom de som vi uttryckligen ändrats.
Det finns också en genväg när man ärver, vanligtvis används när man ärver från sitt eget tema:
<style name="AppTheme.Red">
<item name="colorAccent">@color/red</item>
</style>
Eftersom det redan har AppTheme.
i början av namnet ärver det automatiskt utan att behöva definiera parent
temat. Detta är användbart när du behöver skapa specifika stilar för en del (till exempel en enda aktivitet) i din app.
Flera teman i en app
Med mer än ett tema i din Android-applikation kan du lägga till anpassade färger till varje tema för att vara så här:
Först måste vi lägga till våra teman till style.xml
så här:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<!-- -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
</style>
......
Ovanför kan du se OneTheme och TwoTheme .
Gå nu till din AndroidManifest.xml
och lägg till den här raden: android:theme="@style/OneTheme"
till din applikationstagg , detta kommer att göra OneTheme till standardtema:
<application
android:theme="@style/OneTheme"
...>
Skapa en ny xml-fil med namnet attrs.xml
och lägg till den här koden:
<?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) -->
Gå tillbaka till style.xml
och lägg till dessa färger med dess värden för varje 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>
Nu har du anpassade färger för varje tema, låt oss lägga till dessa färger i våra vyer.
Lägg till anpassad_blåfärg till TextView genom att använda "? Attr /":
Gå till din imageView och lägg till den här färgen:
<TextView>
android:id="@+id/txte_view"
android:textColor="?attr/custom_blue" />
Klipp vi kan ändra temat bara med enstaka rad setTheme(R.style.TwoTheme);
den här raden måste vara före setContentView()
metoden onCreate()
, som den här Activity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.TwoTheme);
setContentView(R.layout.main_activity);
....
}
ändra tema för alla aktiviteter på en gång
Om vi vill ändra temat för alla aktiviteter måste vi skapa en ny klass med namnet MyActivity utökar AppCompatActivity
klassen (eller Activity
) och lägga till setTheme(R.style.TwoTheme);
till onCreate () -metoden:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (new MySettings(this).isDarkTheme())
setTheme(R.style.TwoTheme);
}
}
Slutligen, gå till alla dina aktiviteter och lägg dem alla utöka MyActivity- basklassen:
public class MainActivity extends MyActivity {
....
}
För att ändra temat, gå bara till MyActivity och ändra R.style.TwoTheme
till ditt tema ( R.style.OneTheme
, R.style.ThreeTheme
....).