Androidには、ユーザーインターフェイスの開発を構造化できるスタイルとテーマがあります。
これらは、要素の設計を定義する属性で構成されています。属性を作成することも、既存の属性を使用することもできます。属性には値を割り当てることができ、そのタイプは作成時に指定されます。
Android SDKからの属性宣言の例:
<attr name="background" format="reference|color" />
注意:
@[package:]type/name
構造体を介した別の属性への参照もタイプです。
テーマとスタイル
テーマとスタイルは非常に似ていますが、異なる目的で使用されます。
このスタイルは、特定のウィジェットの属性を組み合わせたものです。スタイルの属性を抽出することで、複数のウィジェットで同時に簡単に使用および保守できます。
次に、テーマは、アプリケーションで参照できる属性のセットを定義します。
スタイルとテーマは連携して機能するように設計されています。
たとえば、ボタンの背景がcolorPrimary
で、テキストの色がであるスタイルがありますcolorSecondary
。これらの色の実際の意味は、トピックに記載されています。
<?xml version="1.0" encoding="utf-8" ?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="LightTheme" parent="YourAppTheme">
<item name="colorPrimary">#FFFFFF</item>
<item name="colorSecondary">#000000</item>
</style>
<style name="DarkTheme" parent="YourAppTheme">
<item name="colorPrimary">#000000</item>
<item name="colorSecondary">#FFFFFF</item>
</style>
<style name="Button.Primary" parent="Widget.MaterialComponents.Button">
<item name="android:background">?attr/colorPrimary</item>
<item name="android:textColor">?attr/colorSecondary</item>
</style>
</resources>
デバイスがナイトモードに入ると、アプリケーションはこれらのリソースの値を変更することで、「明るい」テーマから「暗い」テーマに切り替えることができます。
スタイルは特定のカラーリソースではなくセマンティック名を使用するため、スタイルを変更する必要はありません。
XMLのリンクタイプ
属性にandroid:background
はいくつかのタイプがあります。
android:background="@color/colorPrimary" android:background="?attr/colorPrimary"
@color/colorPrimary
- c colorPrimary
, <color name="colorPrimary">#FFFFFF<color>
, res/values/color.xml
.
:
- , , «name», XML-. , XML- <resources>
, .
, ?attr
- .
?attr/colorPrimary
colorPrimary
, :
<?xml version="1.0" encoding="utf-8" ?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="YourAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
</style>
</resources>
?attr
, .
, .
, , , .
@[package:]type/name
?[package:]type/name
package
- () , . - , .
type
- ()attr
?
.
name
- , .
? vs ?attr vs ?android:attr
, , ?android:attr/colorPrimary
, ?attr/colorPrimary
, ?colorPrimary
.
, Android SDK, android
, .
?
?attr
, (, AppCompat MaterialDesign), , .
Android SDK, , colorPrimary
.
, API.
Google Android :
-
Android styling: themes vs styles
What’s your text’s appearance?
Android Styling: themes overlay
Android Styling: prefer theme attributes
-
私はまだAndroid Dev Summit
2019年からのビデオを見ることをお勧めします。ビデオへのリンク