12

同様のアプリケーションのセットがあります。共通のリソースとコードをライブラリ プロジェクトに抽出すると、アプリケーションは必要なものをオーバーライドするだけです。私のライブラリには、次のスタイルが定義されています。

<style name="ListItemText">
    <item name="android:layout_toRightOf">@id/preview_image</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/previewTextSize</item>
</style>

ご覧のとおり、android:layout_toRightOf属性が含まれているため、このスタイルは ListView 行のテキストに適用され、その行の画像の右側に表示されます。
ただし、私のアプリケーションの 1 つで、画像の下にテキストを表示したいと考えています。ListItemText属性値をオーバーライドandroid:layout_toRightOfして に置き換えるには、そのアプリケーションのスタイルをどのように定義する必要がありますandroid:layout_belowか?

私がそれを次のように定義すると:

<style name="ListItemText">
    <item name="android:layout_below">@id/preview_image</item>
</style>

画像の右と下にテキストを表示し、ライブラリとアプリケーション スタイル XML の両方の属性を効果的にまとめます。

ps:私の問題の解決策の 1 つは、スタイルを取り除き、android:layout_toRightOf代わりにレイアウト xml に移動することです。次に、ターゲット アプリケーションで、このレイアウトを再定義/オーバーライドできます。しかし、属性をオーバーライドするためのよりシンプルで簡単な方法を提供できるため、スタイルベースのソリューションを探しています。
(継承されたスタイルをparent属性で使用することもできますが、これにはアプリケーションでレイアウトのオーバーライドが必要になるため、これは回避しようとしています)。

4

2 に答える 2

9

を無効android:layout_toRightOfにするには、に設定し@nullます。アプリListItemTextで次のようにスタイルを定義すると、希望どおりに動作するはずです。

<style name="ListItemText">
    <item name="android:layout_toRightOf">@null</item>
    <item name="android:layout_below">@id/preview_image</item>
</style>
于 2011-10-25T08:52:41.927 に答える
0

「親」を使用して特殊なスタイルを導出することもできますが(http://developer.android.com/guide/topics/ui/themes.htmlを参照)、このようなレイアウトをスタイルで定義しても、この問題を切り分けます。レイアウトファイルにいくつかのレイアウト情報を残してもかまいません。

于 2011-10-15T18:58:52.490 に答える