10

Android の小さなボタン スタイルを拡張したい。インラインで実行できます:

<Button android:id="@+id/myButton"
        style="?android:attr/buttonStyleSmall"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="10dp"
        android:text="Click Here"/>

しかし、再利用性のために、これらのスタイルをカスタム スタイルに転送したいと考えています。スタイルに親として追加buttonStyleSmall(または?)するにはどうすればよいですか? Widget.Button.Small私のカスタム スタイル XML では次のようになります。

<style name="RightLink" parent="?android:attr/buttonStyleSmall">
  <item name="android:layout_alignParentRight">true</item>
  <item name="android:layout_gravity">right</item>
  <item name="android:layout_height">wrap_content</item>
  <item name="android:layout_width">wrap_content</item>
  <item name="android:paddingLeft">2dp</item>
  <item name="android:paddingRight">2dp</item>
  <item name="android:textSize">10dp</item>
</style>

そのスタイルを使用するボタン宣言で:

<Button android:id="@+id/myButton"
        style="@style/RightLink"
        android:text="Click Here"/>

編集

以下の Lukas で説明されている正しい構文を使用@android:attr/buttonStyleSmallして (親として使用)、2 つの違いがまだ見られます。

スタイルとして buttonStyleSmall とインライン スタイルが追加されたボタン:

pic1

親として buttonStyleSmall を持つカスタム スタイル:

pic2

私は何が欠けていますか?

4

1 に答える 1

16

したがって、標準の Android スタイルからスタイル情報を継承しようとします。このためには、parent既に行ったように - 属性を使用する必要があります。

標準スタイルを継承するときの唯一の例外は、@not aを使用する必要があることです?:

<style name="RightLink" parent="@android:attr/buttonStyleSmall">

プラットフォーム スタイルでこれを行う方法についての詳細 (自分で作成したスタイルとは異なるため) については、こちらを参照してください。


それをいじってみると、あなたが吸う方法は正しいことがわかりましたが、頼りになる方法は間違っています:

<style name="RightLink" parent="@android:style/Widget.Button.Small">

これは機能します。

違いは、-attribute を使用してコード内でこれを追加するために使用される整数定数が、 Android の -class のstyle-subclass で宣言されRていることattrです。

XML スタイルの定義 (実際に継承できるもの) は、style-class の -subclass に格納されRます。したがって、上記の行で問題が解決するはずです。

于 2011-08-23T22:10:20.673 に答える