如何使用xml布局文件中的自定义内联属性来自定义视图样式 [英] How to use custom inline attributes in xml layout files for customizing style of views
问题描述
自从我升级Android支持库以来,我一直在努力为按钮,文本视图和其他视图设置自定义颜色.显然,内联属性会被应用程序主题中定义的值覆盖.
since when I upgraded the Android Support Library, I'm struggling with setting custom colors for buttons, textviews and other views. Apparently, inline attributes get overridden by values defined in the application theme.
我已经在values/styles.xml中定义了一个应用程序主题:
I have defined an application theme in values/styles.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlActivated">@color/colorPrimary</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
例如,在布局文件中,我将按钮的背景和文本颜色设置如下:
For instance, in my layout files, I set background and text colors of a button as follows:
<Button
...
android:textColor="@color/colorPrimary"
android:background="@drawable/homebutton"
...
/>
这是我在colors.xml中定义颜色的方法:
And here's how I define colors in colors.xml:
<resources>
<color name="colorPrimary">#0066FF</color>
<color name="colorPrimaryDark">#004AFF</color>
<color name="colorAccent">#FFFFFF</color>
<color name="background">#CCCCCC</color>
<color name="text">#555555</color>
<color name="green">#009900</color>
<color name="red">#FF0000</color>
<color name="orange">#FFA500</color>
<color name="white">#FFFFFF</color>
<color name="brown">#7A5230</color>
<color name="goalkeeper">#FFA500</color>
<color name="defender">#007c09</color>
<color name="midfielder">#1d8dc0</color>
<color name="attacker">#aa0a1c</color>
</resources>
此外,在清单中,我正确设置了主题:
Also, in the Manifest I correctly set the theme:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:theme">
在预览中,一切看起来都很不错,但是当我在模拟器中启动应用程序时,所有内联属性都会被应用程序主题定义的值忽略和覆盖.为什么这样?为什么忽略内联属性?有办法避免这种情况吗?
In the preview everything looks good, however when I launch the app in the simulator all inline attributes are ignored and overridden by the values defined by my application theme. Why so? Why are inline attributes ignored? Is there a way to avoid that?
UPDATE: I'm currently following the solution pointed out here https://code.google.com/p/android/issues/detail?id=203136&q=-has%3Ablocked%20reportedby%3DDeveloper%20attachments%3D2%20label%3AComponent-Support-Libraries&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened It may be an issue caused by a bug in Maven Local repository
推荐答案
找到了原因,从而解决了问题:-)
Found the cause, hence fixed the issue :-)
Maven本地存储库(aka m2repository)的版本29显然有问题,如此处 https://code.google.com/p/android/issues/detail?id=203546
Apparently the version 29 of the Maven Local Repository (aka m2repository)is buggy, as pointed out here https://code.google.com/p/android/issues/detail?id=203136&q=-has%3Ablocked%20reportedby%3DDeveloper%20attachments%3D2%20label%3AComponent-Support-Libraries&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened and here https://code.google.com/p/android/issues/detail?id=203546
解决方案很简单:只需降级到版本26,可以在此处下载 http://dl.google.com/android/repository/android_m2repository_r26.zip
The solution is simple: just downgrade to version 26, which can be downloaded here http://dl.google.com/android/repository/android_m2repository_r26.zip
这篇关于如何使用xml布局文件中的自定义内联属性来自定义视图样式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!