gpt4 book ai didi

android - 避免android样式中的重复代码

转载 作者:行者123 更新时间:2023-11-29 17:33:07 26 4
gpt4 key购买 nike

我有一个支持 api 14 和目标 api 21 的 Android 应用程序。我有一些样式需要被 api 21 覆盖。发生的情况是我需要复制所有样式项目,只是为了更改一个项目。

例如:

<!-- values/styles.xml -->

<style name="Widget.HelloWorld.Button">
<item name="android:textSize">24sp</item>
<item name="android:drawableLeft">@android:drawable/ic_menu_delete</item>
</style>

如果我只想覆盖 api 21 中的属性 android:textSize,我还需要复制项目 android:drawableLeft

所以为了避免这种情况,我想出了一个解决方案。在这个例子中,我有三个按钮(foobarfancy)以及一些样式(Widget.HelloWorld.Button.FooWidget.HelloWorld.Button.BarWidget.HelloWorld.Button.Fancy )

<!-- values/styles.xml -->

<resources>
<style name="v0.Widget.HelloWorld.Button" parent="Widget.AppCompat.Button">
<item name="android:textSize">24sp</item>
<item name="android:drawableLeft">@android:drawable/ic_menu_delete</item>
</style>

<style name="v0.Widget.HelloWorld.Button.Foo" parent="Widget.HelloWorld.Button">
<item name="android:textColor">#f00</item>
</style>

<style name="v0.Widget.HelloWorld.Button.Bar" parent="Widget.HelloWorld.Button">
<item name="android:textColor">#ff0</item>
</style>

<style name="v0.Widget.HelloWorld.Button.Fancy" parent="Widget.HelloWorld.Button">
<item name="android:textColor">#f0f</item>
</style>

<!-- Alias -->
<style name="Widget.HelloWorld.Button" parent="v0.Widget.HelloWorld.Button" />
<style name="Widget.HelloWorld.Button.Foo" parent="v0.Widget.HelloWorld.Button.Foo" />
<style name="Widget.HelloWorld.Button.Bar" parent="v0.Widget.HelloWorld.Button.Bar" />
<style name="Widget.HelloWorld.Button.Fancy" parent="v0.Widget.HelloWorld.Button.Fancy" />
</resources>

我已在所有样式名称前加上会产生影响的 API 版本号。由于 values/styles.xml 是默认值,因此我使用 v0 作为前缀。

现在,在 values-v21/styles.xml 中,我可以只覆盖我想要的项目,而无需重复代码。

<!-- values-v21/styles.xml -->

<resources>
<style name="v21.Widget.HelloWorld.Button" parent="v0.Widget.HelloWorld.Button">
<item name="android:textSize">36sp</item>
</style>

<style name="v21.Widget.HelloWorld.Button.Fancy" parent="v0.Widget.HelloWorld.Button.Fancy">
<item name="android:colorPrimary">@color/primary</item>
</style>

<!-- Alias -->
<style name="Widget.HelloWorld.Button" parent="v21.Widget.HelloWorld.Button" />
<style name="Widget.HelloWorld.Button.Fancy" parent="v21.Widget.HelloWorld.Button.Fancy" />
</resources>

我想知道这种方法的缺点是什么。

最佳答案

您可以使用打开版本限定符的维度资源修复原始重复问题,然后在样式中引用它:

<!-- values/dimens.xml -->
<resource>
<dimen name="hello_text_size">24sp</dimen>
</resource>

<!-- values-v21/dimens.xml -->
<resource>
<dimen name="hello_text_size">36sp</dimen>
</resource>

<!-- values/styles.xml -->
<style name="Widget.HelloWorld.Button">
<item name="android:textSize">@dimen/hello_text_size</item>
<item name="android:drawableLeft">@android:drawable/ic_menu_delete</item>
</style>

关于android - 避免android样式中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com