Android
Motyw, styl, atrybut
Szukaj…
Użyj motywu niestandardowego globalnie
W themes.xml:
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
W AndroidManifest.xml:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Activity declarations here -->
</application>
Zdefiniuj kolory podstawowe, podstawowe ciemne i akcentujące
Możesz dostosować paletę kolorów motywu .
Korzystanie z interfejsów API platformy
<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>
Korzystanie z biblioteki obsługi Appcompat (i 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>
Użyj niestandardowego motywu na działanie
W themes.xml:
<style name="MyActivityTheme" parent="Theme.AppCompat">
<!-- Theme attributes here -->
</style>
W 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>
Kolor marszczenia (API 21+)
Animacja tętnienia jest wyświetlana, gdy użytkownik naciśnie klikalne widoki.
Możesz użyć tego samego koloru tętnienia, co aplikacja przypisując ?android:colorControlHighlight
w swoich widokach. Możesz dostosować ten kolor, zmieniając atrybut android:colorControlHighlight
w swoim motywie:
Ten kolor efektu można zmienić:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:colorControlHighlight">@color/my_color</item>
</style>
Lub, jeśli używasz motywu materiałowego:
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorControlHighlight">@color/your_custom_color</item>
</style>
Pasek stanu światła (API 23+)
Ten atrybut może zmienić tło ikon paska stanu (u góry ekranu) na biały.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowLightStatusBar">true</item>
</style>
Przezroczysta nawigacja i paski stanu (API 19+)
Pasek nawigacyjny (na dole ekranu) może być przezroczysty. Oto sposób na osiągnięcie tego.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentNavigation">true</item>
</style>
Pasek stanu (u góry ekranu) można ustawić jako przezroczysty, stosując ten atrybut do stylu:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:windowTranslucentStatus">true</item>
</style>
Kolor paska nawigacji (API 21+)
Ten atrybut służy do zmiany paska nawigacji (jeden zawierający przycisk Wstecz, Strona główna Ostatnie). Zwykle jest czarny, ale jego kolor można zmienić.
<style name="AppTheme" parent="Theme.AppCompat">
<item name="android:navigationBarColor">@color/my_color</item>
</style>
Dziedziczenie motywu
Podczas definiowania motywów zwykle używa się motywu dostarczonego przez system, a następnie zmiany modyfikują wygląd, aby pasował do jego własnej aplikacji. Na przykład w ten sposób dziedziczony jest motyw Theme.AppCompat
:
<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>
Ten motyw ma teraz wszystkie właściwości standardowego motywu Theme.AppCompat
, z wyjątkiem tych, które wyraźnie zmieniliśmy.
Istnieje również skrót podczas dziedziczenia, zwykle używany, gdy dziedziczy się z własnego motywu:
<style name="AppTheme.Red">
<item name="colorAccent">@color/red</item>
</style>
Ponieważ ma już AppTheme.
na początku nazwy dziedziczy ją automatycznie, bez potrzeby definiowania motywu parent
. Jest to przydatne, gdy trzeba utworzyć określone style dla części (na przykład pojedynczego działania) aplikacji.
Wiele motywów w jednej aplikacji
Używając więcej niż jednego motywu w aplikacji na Androida, możesz dodać niestandardowe kolory do każdego motywu, aby wyglądać tak:
Najpierw musimy dodać nasze motywy do style.xml
następujący sposób:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<!-- -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
</style>
......
Powyżej widać OneTheme i TwoTheme .
Teraz przejdź do AndroidManifest.xml
i dodaj ten wiersz: android:theme="@style/OneTheme"
do tagu aplikacji , dzięki temu OneTheme będzie domyślnym motywem:
<application
android:theme="@style/OneTheme"
...>
Utwórz nowy plik xml o nazwie attrs.xml
i dodaj ten kod:
<?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) -->
Wróć do style.xml
i dodaj te kolory wraz z wartościami dla każdego motywu:
<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>
Teraz masz niestandardowe kolory dla każdego motywu, dodajmy ten kolor do naszych widoków.
Dodaj kolor custom_blue do TextView za pomocą „? Attr /”:
Przejdź do obrazu Wyświetl i dodaj ten kolor:
<TextView>
android:id="@+id/txte_view"
android:textColor="?attr/custom_blue" />
Mow, możemy zmienić motyw tylko za pomocą jednego wiersza setTheme(R.style.TwoTheme);
ten wiersz musi znajdować się przed setContentView()
metodzie onCreate()
, podobnie jak ten Activity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.TwoTheme);
setContentView(R.layout.main_activity);
....
}
zmień motyw wszystkich działań jednocześnie
Jeśli chcemy zmienić motyw dla wszystkich działań, musimy utworzyć nową klasę o nazwie MyActivity rozszerza klasę AppCompatActivity
(lub klasę Activity
) i dodać setTheme(R.style.TwoTheme);
Metoda onCreate () :
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (new MySettings(this).isDarkTheme())
setTheme(R.style.TwoTheme);
}
}
Na koniec przejdź do wszystkich swoich działań i dodaj, aby rozszerzyły klasę bazową MyActivity :
public class MainActivity extends MyActivity {
....
}
Aby zmienić motyw, przejdź do MyActivity i zmień R.style.TwoTheme
na swój motyw ( R.style.OneTheme
, R.style.ThreeTheme
....).