什么是阻止用系统范围的UI组件替换UI组件的最简单方法?

时间:2014-01-31 16:59:54

标签: android android-ui

我设计我的应用程序运行在一个漂亮,漂亮和干净的全息主题(谷歌默认),当我在我兄弟的设备上安装它时,我有一个令人不快的惊喜,发现标准的UI组件(旋转器,进度条,水平进度条等等被某些工厂预安装组件覆盖。现在,这些组件在应用于系统范围的UI时很好,但是它们会吸引我的应用程序。

我兄弟的手机是S4的某种中文克隆版,但我想其他非谷歌设备也会如此。

我想到的唯一解决方案是为每个我不想被覆盖的组件创建一个自定义组件,从android源代码复制它的xml。我不知道该怎么做,但与我想达到的目标相比似乎有很多麻烦。

在每个设备中使用holo组件运行我的应用程序的最简单方法是什么?


关于我的答案的编辑

在我的应用程序中,我将minSdkVersion设置为11.主题在应用程序标记的清单中设置,并且是“AppTheme”,在此文件中配置

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="@style/_AppTheme">
        <!-- Customize your theme here. -->
    </style>

    <style name="_AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:progressBarStyleHorizontal">
            @style/Widget.Custom.ProgressBar.Horizontal.Green
        </item>
    </style>

</resources>

我会查看我兄弟的设备,了解安装的Play商店并在此报告。

我只是想更新你的主题,因为我看到你在谈论Theme.Holo ......也许AppCompat库有什么问题?

1 个答案:

答案 0 :(得分:1)

  

但我想其他非Google设备也会出现同样情况。

通常不会。

如果设备在其上合法地拥有Play商店(即,它不是由用户或设备制造商放置的盗版副本),则必须保留Theme.Holo主题集。 Theme.DeviceDefault主题集是设备制造商可以修补的地方。

当然,全息小部件主题仅存在于API Level 11 +。

  

在每个设备中使用holo组件运行我的应用程序的最简单方法是什么?

如果android:minSdkVersion为11或更高,请使用继承自Theme.Holo的主题,而不必担心破坏该主题的设备,例如您兄弟的手机。

如果您的android:minSdkVersion为10或更低,欢迎您考虑HoloEverywhere项目,但我个人不会。在旧设备上,用户将期望设备自己的主题,而不是全息主题,因此用户可能无法识别在全息主题中看起来有很多不同的EditTextSpinner之类的内容。