10

だから私は、他の人がそれを使用するときにその色を簡単にカスタマイズできるようにしたいAndroidライブラリを持っています。問題は、色が単なる単一のプロパティ (ビューの背景など) ではなく、テーマの色 (ビューの背景、テキストの色、ボタンのストロークなど) に似ていることです。ビュー属性として渡すことはできません。だから私はcolor referenceスタイル、レイアウト、ドローアブルでそれを使用することになりました:

色.xml:

<resources>
    <attr name="color" format="reference" />
</resources>

レイアウト.xml:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/color">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="?attr/color"/>
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:theme="@style/LibraryTheme.TextAppearance"/>
</LinearLayout>

ライブラリ プロジェクトの styles.xml:

<style name="LibraryTheme.TextAppearance">
    <item name="android:textColor">?attr/color</item>
    <item name="colorControlNormal">?attr/color</item>
    <item name="android:textColorHint">?attr/color</item>
    <item name="colorControlActivated">?attr/color</item>
    <item name="colorControlHighlight">?attr/color</item>
</style>

それはうまく機能し、誰かが私のライブラリを使用しているとき、彼は自分のテーマで使用したい色を宣言する必要があります:

アプリ プロジェクトの styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="color">@color/my_color</item>
</style>

問題はこれです: このライブラリをデフォルトの配色で提供したいのです。現在、2 つのオプションで実行できます。

  1. デフォルトのカラーセットで自分のテーマを宣言すると、ユーザーは自分のテーマを自分のテーマから継承する必要があります。
  2. ユーザーが自分のテーマの色としてそれを使用できるように、私の color.xml に default_color を入れます。

最初のものは、ユーザーに特定のアプリ テーマ (AppCompact.Light など) を使用するように強制できないため、本当に悪いです。ユーザーがデフォルトをシームレスに使用できるようにする必要があり、テーマにいくつかの色を設定する必要があるため、2番目のものもそれほど優れていません。

他のユーザーが簡単に色を遊べるようにする方法が他にあると思いますか?

ありがとう。

4

3 に答える 3

7

問題は、色参照を使用していることです。この場合、通常の色プロパティを使用します。これらは、colors.xml でユーザーがオーバーライドできます。

あなたのライブラリプロジェクトでは:

色.xml:

<resources>
    <color name="color">#FFFFFF</color>
</resources>

レイアウト.xml:

<LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/color">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/color"/>
            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:theme="@style/LibraryTheme.TextAppearance"/>
</LinearLayout>

スタイル.xml:

<style name="LibraryTheme.TextAppearance">
    <item name="android:textColor">@color/color</item>
    <item name="colorControlNormal">@color/color</item>
    <item name="android:textColorHint">@color/color</item>
    <item name="colorControlActivated">@color/color</item>
    <item name="colorControlHighlight">@color/color</item>
</style>

また、ユーザーが別の色を使用したい場合は、アプリの colors.xml で独自の色を宣言できます。

<resources>
    <color name="color">#000000</color>
</resources>
于 2016-01-27T13:50:17.903 に答える
0

ポイントを正しく理解できるかどうかはわかりませんが、次のオプションがあると思います。

Strings.xml ファイルで次のように宣言します。

<!-- Colors-->
    <color name="color1">#55000000</color>
    <color name="color2">#FFFFFF</color>
    <color name="color3">#000000</color>

次に、この参照を渡してテンプレート オブジェクトをカスタマイズします。ユーザーがすべてのアプリの色を変更したい場合は、String.xml に新しい値を設定するだけです。

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/color1"/>
于 2016-01-21T17:40:49.810 に答える