web-dev-qa-db-ja.com

android-v7をサポートするXMLでselectableItemBackgroundを適用する

Androidサポートv7がアプリケーションに含まれていても

Android:background="?android:attr/selectableItemBackground"を追加

私のIDEを作成すると、Eclipseはエラーをスローし(コンパイルを妨げます)、selectableItemBackgroundはmin Api 11以降のみのものであることを通知します。

この属性をXMLの背景に追加するにはどうすればよいですか?

上位のライブラリからコピーして貼り付けることは解決策ではないと想定する

68
CQM

この属性はライブラリ(v7をサポート)で定義されているため、ユーザー定義の属性として使用します:Android:プレフィックスなし:

Android:background="?attr/selectableItemBackground"

表示されるエラーは、?android:attr/selectableItemBackgroundが11以上のAPIバージョンで利用可能であることを指摘しています。

198
Vikram

これがselectedItemBackgroundです。 /platforms/Android-14/data/res/themes.xmlにあります

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:exitFadeDuration="@Android:integer/config_mediumAnimTime">

    <item Android:state_window_focused="false" Android:drawable="@color/transparent" />

    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
    <item Android:state_focused="true"  Android:state_enabled="false" Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_disabled" />
    <item Android:state_focused="true"  Android:state_enabled="false"                              Android:drawable="@drawable/list_selector_background_disabled" />
    <item Android:state_focused="true"                                Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_transition" />
    <item Android:state_focused="false"                               Android:state_pressed="true" Android:drawable="@drawable/list_selector_background_transition" />
    <item Android:state_focused="true"                                                             Android:drawable="@drawable/list_selector_background_focused" />
    <item Android:drawable="@color/transparent" />

</selector>

Android SDKディレクトリでドロウアブルを見つけることができます

../platforms/Android-14/data
15
Sunny

このテーマの専門家ではありませんが、プラットフォームバージョンベースのテーマが必要なようです。 公式ガイド は、このプロセスをかなりよく説明しています。

バージョンごとに異なるXMLファイルを作成し、res/values-v7res/values-v11などに保存する必要があります。その後、これらのスタイルをビューに使用します。このようなもの:

res/values-v7

<style name="LightThemeSelector" parent="Android:Theme.Light">
    ...
</style>

res/values-v11

<style name="LightThemeSelector" parent="Android:Theme.Holo.Light">
    <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
    ...
</style>

次に、ビューにスタイルを使用します。

<TextView
    style="@style/LightThemeSelector"
    Android:text="@string/hello" />

お役に立てれば。乾杯。

4
kraxor