Material Componentsを導入しボタンを配置しようとしていたのですが、style指定の箇所で不明な点があったので質問させていただきました。
https://material.io/develop/android/components/buttons/
上記のサイトを参考にボタンを配置していたのですがText button
とOutlined button
のstyleの指定方法に違いがあることに気づきました。
Text button
の場合は@style/~
と指定しているのに対してOutlined button
は?attr/~
と指定しています。
styleを指定する時にこのような記述の違いにはどのような意味があるのでしょうか?
xml
1<Button 2 android:id="@+id/textButton" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:text="Text button" 6 style="@style/Widget.MaterialComponents.Button.TextButton" 7/>
xml
1<Button 2 android:id="@+id/outlinedButton" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:text="Outlined button" 6 style="?attr/materialButtonOutlinedStyle" 7/>
試したこと
自分なりに調べて、style、attrがどのようなものについてかは以下のような認識です。
・style : あらかじめ色やサイズなどを定義しておいて使い回せる。コード量が減り見易くもなる。
・attr : カスタムビュー作成時に独自の属性を作れる。?attr/~
でテーマで指定された値を参照でき、テーマ内の値が変われば参照している箇所を一括で変えることができる。
また、?attr/materialButtonOutlinedStyle
を⌘Bで追ってみるとvalues.xml
が開かれ以下のような記述が見つかりました。
xml
1<attr format="reference" name="materialButtonOutlinedStyle"/>
そして同じファイル内に以下のような記述があったのですが、結局?attr/materialButtonOutlinedStyle
は@style/Widget.MaterialComponents.Button.OutlinedButton
を指しているということだと思うのですが合ってますでしょうか?(違ってたら教えて下さい)
xml
1<item name="materialButtonOutlinedStyle">@style/Widget.MaterialComponents.Button.OutlinedButton</item>
試しに、Outlined button
に関して以下のように@style/~
と記述しても正常に動作しました。対して、Text button
には?attr/~
なる記述は無さそうでした。
xml
1<Button 2 android:id="@+id/outlinedButton" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:text="Outlined button" 6 style="@style/Widget.MaterialComponents.Button.OutlinedButton" 7/>
質問内容をまとめると以下の2点です。
-
なぜ
Outlined button
は@style/~
ではなく?attr/~
と指定して記述するようになっているのか?(?attr/materialButtonOutlinedStyle
は結局@style/~
を指してるっぽいので遠回りしているように見える) -
なぜ
Outlined button
は<attr format="reference" name="materialButtonOutlinedStyle"/>
という記述があるのに対してText button
にはこのような記述が無いのか?(このような設計にどのような意味があるのか)
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/26 02:49