我正在使用带有这些设置的项目的Android Studio 2.2.1:
compileSdkVersion 24
buildToolsVersion "24.0.2"
minSdkVersion 16
targetSdkVersion 24
如果我使用GUI更改按钮背景,则会将其添加到布局中:
android:background="@color/colorPrimary"
然后,如果我在4.4虚拟设备上运行应用程序(微软的Android模拟器,因为我在AMD系统上,我想要一个快速模拟器),或者在带有Android 6.0.1的三星Galaxy S6上运行该按钮,正确的颜色但丢失了左右填充,文本右键移动到按钮的左右边缘。
如果我只设置backgroundTint,则按钮在虚拟设备上具有正确的填充,但颜色不正确。但是,在S6上,它具有正确的颜色和填充。
这似乎是某个地方的错误,但在哪里?是代码生成还是Android 4.4中的错误?
我认为Android Studio应该采取一切必要措施,使其在两个平台级别上都能正常工作,无论它是否像其中一些解决方案一样复杂:
Standard Android Button with a different color
或更简洁的东西。
我的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>
</style>
</resources>
我的AndroidManifest主题设置为:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
答案 0 :(得分:1)
这似乎是某个地方的错误,但在哪里?
就在这里:
android:background="@color/colorPrimary"
是代码生成还是Android 4.4中的错误?
不,这是你的替代背景。它是一种颜色,没有任何内在填充,也没有被StateListDrawable
包裹。
Button
窗口小部件的库存背景具有一定量的填充作为背景本身的一部分(例如,通过用于背景的九个补丁PNG中的一些透明像素)。实际背景本身是StateListDrawable
,它根据Button
的状态选择要应用的其他几个可绘制资源中的一个(例如,正常,按下,聚焦,禁用)。
要替换Button
背景,您需要先使用自己的StateListDrawable
。否则,您的Button
似乎无法直观地响应点击事件或其他状态更改(例如,被禁用)。然后,您可以在状态的背景中加入一些填充,或者根据需要在Button
窗口小部件上添加填充。
我认为Android Studio应该做任何需要使它在两个平台级别上都正常工作
Android Studio假设您知道自己在做什么。没有严格要求Button
背景具有这种填充,并且没有强硬要求Button
是对用户有意义的东西(对比&# 34,嘿,当我按下它时,为什么这个按钮似乎没有视觉反应?&#34;)。在某些情况下,开发人员 希望Button
窗口小部件没有填充,例如在分段列表控件的复合窗口小部件的实现中。
就个人而言,我认为在Button
背景下有一些内在填充的决定是令人遗憾的。但是,这就是它在Android 1.0中实现的方式,并且谷歌已经选择维持这种方法,即使使用较新的主题,也可能是为了向后兼容。
如果我只设置backgroundTint,那么按钮在虚拟设备上有正确的填充,但颜色不正确
我没有使用backgroundTint
使用appcompat-v7
。您可能在那里看到了一个错误。您可以考虑使用完整示例和屏幕截图发布单独的问题,以获得有关该特定问题的更具体帮助。