3

Android ウィジェット用にさまざまなテーマ設定可能なスタイルを定義したいと思います。以下の例では、2 つの ImageView ウィジェットがあり、1 つは私の「テーマ」スタイルを使用し、もう 1 つは手動でスタイル設定されています。アクティビティのテーマ構成に基づいて自動的に決定できるように、'base_theme' プレフィックスを省略できるように構成ファイルを実装したいと考えています。

テーマの作成に関するドキュメントには、スタイル属性を持つ特定のものではなく、すべての ImageView またはボタンのスタイルを変更する方法が記載されています。スタイル設定可能なカスタム コンポーネントを使用することで問題を解決できることがわかりましたが、問題を解決するためのより良い方法があると思います。

base_style.xml

<style name="base_theme" parent="android:Theme.NoTitleBar">
</style>

<style name="base_theme.event_list_filter">
    <item name="android:orientation">horizontal</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">10dp</item>
    <item name="android:background">@drawable/base_white_rounded</item>
</style>

<style name="base_theme.base_event_list_filter_image">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:padding">10dp</item>
    <item name="android:background">@drawable/vr_black_border</item>
</style>

<style name="base_theme.base_event_list_scrollable">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">0dp</item>
    <item name="android:layout_weight">1</item>
    <item name="android:background">@drawable/base_white_rounded</item>
</style>

<style name="base_theme.base_event_list_table">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>
</style>

activity_layout.xml

<LinearLayout style="@style/base_theme.base_event_list_filter" >
    <ImageView
        style="@style/base_theme.base_event_list_filter_image"
        android:src="@drawable/pic0" />

    <ImageView
        ...
        android:src="@drawable/pic1" />
</LinearLayout>

助けてくれてありがとう、
マシーク

4

1 に答える 1

5

私は解決策を見つけました。同様のテーマの問題を抱えている人に役立つことを願っています。

まず、base_theme に新しい属性を追加し、次のように構成しました。

base_style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- add attributes to your theme -->s
    <declare-styleable name="base_theme">
        <attr name="event_list_filter" format="reference" />
        <attr name="pic0" format="reference" />
    </declare-styleable>

    <!-- fill attributes with your own styles/drawables/etc -->
    <style name="base_theme" parent="android:Theme.NoTitleBar">
        <item name="event_list_filter">@style/base_theme.event_list_filter_image</item>
        <item name="pic0">@drawable/base_theme.pic0</item>
    </style>

        <!-- define corresponding resource -->
    <style name="base_theme.base_event_list_filter_image">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:padding">10dp</item>
        <item name="android:background">@drawable/vr_black_border</item>
    </style>

    <drawable name="base_theme.pic0">@drawable/base_pic0</drawable>

</resources>

別のレイアウトsteel_styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- fill attributes with your own styles/drawables/etc -->
    <style name="steel_theme" parent="@style/base_theme">
        <item name="pic0">@drawable/steel_theme.pic0</item>
    </style>

    <drawable name="steel_theme.pic0">@drawable/steel_pic0</drawable>

</resources>

アクティビティ レイアウト ファイルactivity_layout.xml

...
<ImageView
    style="?attr/event_list_filter_image"
    android:src="?attr/pic0" />
...

このような構成pic0では、AndroidManifest.xml でアクティビティに設定されたテーマに基づいて画面が異なります。

于 2013-08-14T12:33:24.530 に答える