2

https://stackoverflow.com/a/5052401/305532を読んで理解しましたが、一般的にスタイルを設定して個々のウィジェット スタイルをオーバーライドするのではなく、サブウィジェットの一部であるスタイルを作成する必要があります。

たとえば、標準とRelativeLayout標準で構成される化合物があります。this をスタイルするためにオーバーライドできますが、本当に欲しいのはEditTextButtonandroid:buttonStyleButton

<my.custom.Widget
  ...
  pkg:buttonStyle="@style/CustomStyle" />

CustomStyleから派生する可能性がありますが、 のandroid:style/Widget.Buttonインスタンスごとに変更可能my.custom.Widgetですpkg:buttonStyle

私が知っている唯一の代替手段は、すべてのスタイル可能な属性を個別に my に追加しattrs.xml(2つ以上のサブウィジェットが同じ属性を必要とするが、値が異なる場合に通常の競合が発生します)、これらすべての属性を手動でコピー/設定することですmy.custom.Widget' s コンストラクター / init メソッド。

これを達成する方法はありますか?

4

2 に答える 2

2

残念ながら、これは不可能のようです。私が見つけることができる唯一の例はActionBar、タイトル、サブタイトル、および進行状況インジケーターのスタイルを渡すことができることです。のソースを見るとActionBarView、タイトルとサブタイトルTextViewのスタイルが で適用されていsetTextAppearance()ます。このProgressBarクラスには、スタイルの 4 番目のパラメーターを受け入れる追加のコンストラクターがあります。ほとんどのViewクラスにはこの追加のコンストラクターがないため、スタイルを渡すことはできません。ただし、いくつかの代替手段があります。

  1. スタイルの代わりにサブビューのレイアウトを渡し、ウィジェットでインフレートします。
  2. サブビューがTextView(as Buttonand EditTextare)の子である場合setTextAppearance()は、渡されたスタイルに使用します。これにより、テキストのスタイリングがかなり適用されます。ユーザーが背景やパディングなどの他のスタイルを適用できるようにする場合は、それぞれにカスタム属性を追加する必要があります。複合ウィジェットを作成している場合、ユーザーが可能なすべてのスタイルをサブビューに適用する必要がない可能性が高いため、サブセットを公開するだけでおそらく十分です。
  3. すでに述べたように、テーマ全体のスタイルを追加します。
于 2014-10-17T15:19:09.317 に答える