76

Android 3.0では、「チェック済み」の概念は「アクティブ化された」背景を使用してレンダリングできます。これにより、リストフラグメントをタップしたときに表示される永続的なバーが表示され、リストの右側にフラグメントのコンテキストが提供されます(たとえば、Gmailでフォルダをタップすると、そのフォルダが強調表示され、別のリストフラグメントが開いて、そのフォルダ内の会話が表示されます。 )。

たとえば、フラグメントサンプルは次のようなものを示しています。

setListAdapter(new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));

そのリソース(android.R.layout.simple_list_item_activated_1)はAndroid3.0の新機能です。それを「アクティブ化」するのは次のとおりです。

android:background="?android:attr/activatedBackgroundIndicator"

この属性値はAndroid3.0の新機能であり、以前のバージョンのAndroidで使用しようとすると、クラッシュする可能性があります。3.0 /大/風景の組み合わせの背景をこの魔法の値に設定し、それ以外の場合はスキップします。

これは、2つの別々のバージョンのレイアウトを用意することで実現できます。1つは-v11リソースセットに、もう1つは通常のリソースセットにあります。ただし、レイアウトの大部分は同じであり、この1つの属性のみが含まれるかスキップされるため、これは私が望むよりも少しDRYが少なくなります。

ドローアブルリソースエイリアスを使用しようと試みたので、android:backgroundはエイリアスを参照でき、エイリアスは区別を処理し-v11ますが、<bitmap>ドローアブルは好きではないようですandroid:src="@null"

この問題にはスタイルとテーマのアプローチがあると思いますが、それらに頭を完全に巻き付けたことがないため(Androidの知識のギャップの1つ)、どうすればよいか完全にはわかりません。

誰かが3.0で「アクティブ化」を使用し、3.0より前ではそれをスキップするためのパターンを、個別のレイアウトを超えて考え出したことがありますか?

ありがとう!

4

1 に答える 1

57

スタイルはあなたの友達です...

2つのvaluesディレクトリがあります。1つはvalues-v11で、もう1つはデフォルト値です。

各valuesディレクトリにはstyles.xmlが含まれていますが、違いはデフォルト値に含まれていることです。

<style name="listViewActivatedStyle"/>

値-v11には以下が含まれます。

<style name="listViewActivatedStyle">
   <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>

次に、を使用する単一のレイアウトを持つことができます。

style="@style/listViewActivatedStyle"

そして適切なものが選択されます。

于 2011-03-11T18:07:09.020 に答える