11

テーマ属性への参照を読んだ後、設定したカスタム テーマの属性の値を参照しようとしています。

ユーザー定義のスタイルをCheckedTextView

<CheckedTextView
    android:id="@+id/contactInfo"
    style="@style/ListViewCheckedTextViewRowStyle" >
</CheckedTextView>

ユーザー定義スタイルは次のように定義されます。

<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
    <item name="android:checkMark">?android:listChoiceIndicatorMultiple</item>
</style>

私が作成した私のテーマは次のように定義されています:

<style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item>
</style>

ただし、表示される checkMark スタイルは、デバイスのデフォルト テーマのドローアブルであり、ユーザー定義のドローアブルではありません。

ドローアブルを表示できる唯一の方法は次のとおりです。

<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
    <item name="android:checkMark">@drawable/btn_check_holo_light</item>
</style>

しかし、特に複数のテーマでこの属性をオーバーライドしたいので、それはこの属性をオーバーライドする目的全体を無効にします。

onCreate()私はこのように私の方法でテーマを設定していActivityます:

public void onCreate(Bundle savedInstanceState) {
    this.setTheme(R.style.Theme_Yellowgreen);
    super.onCreate(savedInstanceState);
    // ...
}

また、次のように AndroidManifest.xml ファイルにテーマを設定しようとしました。

<application android:theme="@style/Theme.Yellowgreen" >

しかし、それはうまくいきませんでした。何がうまくいかないのですか?

アップデート

小さなサンプル プロジェクトを作成したところ、上記のコードが機能しているようです。したがって、このプロパティをオーバーライドする他のスタイルが必要であるか、レイアウト xml ファイルに関係している可能性があります。

私の大規模なプロジェクトではFragmentsActivity. どちらもFragmentsによってListviews支持されていAdaptersます。Fragment AgetView()方法は次のとおりAdapterです。

public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.contact_entry, null);
    }

    //...

    return convertView;
}

Fragment BgetView()方法は次のとおりAdapterです。

public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, parent, false);
    }

    //...

    return convertView;
}

レイアウトは次のように定義されます。

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
    <include layout="@layout/list_item_header" />
    
    <include layout="@layout/contact_entry" />

    <View android:id="@+id/list_divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:drawable/divider_horizontal_dark" />

</LinearLayout>

list_item_header.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/header_text"
    android:layout_width="match_parent"
    android:layout_height="25dip"
    android:background="@color/dark_blue"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:textColor="@color/white"
    android:textSize="14sp"
    android:textStyle="bold" />

contact_entry.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/contactEntry"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:orientation="horizontal" >

    <QuickContactBadge
        android:id="@+id/contactPic"
        style="@style/ContactPicStyle" />

    <CheckedTextView
        android:id="@+id/contactInfo"
        style="@style/ListViewCheckedTextViewRowStyle" >
    </CheckedTextView>

</LinearLayout>

何らかの理由でFragment B、themed の checkMark 属性が正しくレンダリングされませんが、Fragment Aでは、checkMark は現在の YellowGreen テーマを使用し、正しくスタイル設定されています。なぜこれが起こるのでしょうか?

4

1 に答える 1

12

テーマにその行が必要だと思います

<item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item>

したがって、次のようになります。

<style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item>
    <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item>
</style>

アップデート

質問の更新といくつかの追加情報フォームのコメントの後、問題がにあることがわかりましたContext。私の質問で私がしたのと同じ間違いです: Android color selector does not work with custom attributes

一方のフラグメントに渡さActivityれ、もう一方のフラグメントに渡されましたApplication。私は専門家ではありませんが、これらのクラスの両方でさえ、スタイルに関する情報を持つextendsContextのみを拡張しています。将来の理解のためにその記事を読むと役立つかもしれません コンテキスト: http://www.doubleencore.com/2013/06/context/ActivityContextThemeWrapper

于 2013-06-19T07:30:36.783 に答える