she*_*hem 7 android android-custom-view android-theme android-view android-custom-attributes
所以我有一个Android 库,我希望其他人能够在使用它时轻松自定义其颜色.问题是颜色不仅仅是一个属性(如视图背景),但它更像是一个主题颜色(视图背景,文本颜色,按钮的笔触等)所以我是无法将其作为视图属性传递.所以我最终使用了a color reference并在样式,布局和drawable中使用它:
colors.xml:
<resources>
<attr name="color" format="reference" />
</resources>
Run Code Online (Sandbox Code Playgroud)
layout.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>
Run Code Online (Sandbox Code Playgroud)
库项目中的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>
Run Code Online (Sandbox Code Playgroud)
这很有效,当有人使用我的lib时,他必须声明他希望你在他的主题中使用的颜色:
app项目中的styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="color">@color/my_color</item>
</style>
Run Code Online (Sandbox Code Playgroud)
问题是这样的:我想用默认的配色方案来提供这个库.它现在可以通过2个选项执行:
第一个非常糟糕,因为我不能强迫用户使用特定的应用主题(如AppCompact.Light).第二个也不是那么好,因为我希望用户能够无缝地使用默认值,并且我需要在主题中设置几种颜色.
有没有其他方式你认为我可以让其他用户轻松玩颜色?
谢谢.
问题是您正在使用颜色引用,在您的情况下我将使用常规颜色属性 - 用户可以在colors.xml中覆盖它们.
所以在你的图书馆项目中:
colors.xml:
<resources>
<color name="color">#FFFFFF</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
layout.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>
Run Code Online (Sandbox Code Playgroud)
styles.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>
Run Code Online (Sandbox Code Playgroud)
如果用户想要使用不同的颜色,他可以在他的应用程序的colors.xml中声明自己的颜色:
<resources>
<color name="color">#000000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确理解了这一点,但我想您有以下选择:
在 Strings.xml 文件中声明如下内容:
<!-- Colors-->
<color name="color1">#55000000</color>
<color name="color2">#FFFFFF</color>
<color name="color3">#000000</color>
Run Code Online (Sandbox Code Playgroud)
然后自定义您的模板对象传递此引用。如果用户想要更改所有应用程序颜色,他只需在 String.xml 中设置新值
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color1"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |