Android:API-16 的样式泄漏到每个更高的 API 版本

标签 android android-styles

我有这两个文件夹:valuesvalues-v16values文件夹下的styles.xml文件内容如下:

<style name="Widget.App.SearcherButtonWithIcon" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:paddingLeft">16dp</item>
</style>

values-v16文件夹包含相同的样式,但具有不同的paddingLeft值:

<style name="Widget.App.SearcherButtonWithIcon" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:paddingLeft">26dp</item>
</style>

问题是后一个(具有 26dp 填充)应用于每个 API 版本中的每个 View 。为什么会这样,如何解决?

最佳答案

这是预期的行为。 values-v16 表示支持 api 16 以上的设备。您可以在文档中阅读更多相关信息:Providing alternative resources

如果您只希望在 api 16 中使用它,请在 api 17 中使用默认值再次覆盖它。

这是我推荐的方法:

/res/values/styles.xml

<dimen name="searcher_padding_left_default">16dp</dimen>
<dimen name="searcher_padding_left_v16">26dp</dimen>
<dimen name="searcher_padding_left">@dimen/searcher_padding_left_default</dimen>

/res/values-v16/styles.xml
<dimen name="searcher_padding_left">@dimen/searcher_padding_left_v16</dimen>

/res/values-v17/styles.xml
<dimen name="searcher_padding_left">@dimen/searcher_padding_left_default</dimen>

通过这种方式,您只需在一处指定值,这可能有助于将来保持所有值的同步。

关于Android:API-16 的样式泄漏到每个更高的 API 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507396/

相关文章:

Android - EditText 以编程方式不显示键盘

android - 自定义按钮样式部分应用

android - 如何在自定义主题中引用样式

android - 通过样式更改 Android 对话框按钮文本大小

java - Android:启动画面实现不工作

android - 如何使用百分比进行 android 布局?

java - Android Studio 项目文件将文本更改为奇怪的文本

android - 处理程序和可运行泄漏

android - 将信用卡保存到 Google Pay

android - Eclipse 上是否有任何 SQLite 客户端来分析 Android 应用程序中使用的数据库?