为什么在按钮上设置android:background会导致L/R填充丢失?
我将Android Studio 2.2.1与project一起使用,设置如下:为什么在按钮上设置android:background会导致L/R填充丢失?,android,button,background,android-studio-2.2,Android,Button,Background,Android Studio 2.2,我将Android Studio 2.2.1与project一起使用,设置如下: compileSdkVersion 24 buildToolsVersion "24.0.2" minSdkVersion 16 targetSdkVersion 24 如果我使用GUI更改按钮背景,它会将以下内容添加到布局中: android:background="@color/colorPrimary" 然后,如果我在4.4虚拟设备(微软的Android Emulator,因为我在AMD系统上,我想要一个
compileSdkVersion 24
buildToolsVersion "24.0.2"
minSdkVersion 16
targetSdkVersion 24
如果我使用GUI更改按钮背景,它会将以下内容添加到布局中:
android:background="@color/colorPrimary"
然后,如果我在4.4虚拟设备(微软的Android Emulator,因为我在AMD系统上,我想要一个快速的仿真器)上运行该应用程序,或者在装有Android 6.0.1的三星Galaxy S6上运行该应用程序,则按钮的颜色正确,但失去了左右填充,并且文本在按钮的左右边缘运行
如果我只设置backgroundTint,那么按钮在虚拟设备上有正确的填充,但没有正确的颜色。但是,在S6上,它具有正确的颜色和填充
这似乎是一个错误的地方,但在哪里?这是在代码生成中还是Android 4.4中的一个bug
我认为Android Studio应该尽一切努力使其在两个平台级别上都能正常工作,无论它是否像这些解决方案一样复杂:
或者更简洁的东西
My 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"
这似乎是一个错误的地方,但在哪里
就在这里:
android:background="@color/colorPrimary"
这是在代码生成中还是Android 4.4中的一个bug
不,这是你的替代背景。它是一种颜色,没有任何内部填充,也没有包装在StateListDrawable
中
按钮
小部件的股票背景作为背景本身的一部分具有一定的填充量(例如,通过用于背景的九块PNG中的一些透明像素)。实际背景本身是一个StateListDrawable
,它根据按钮的状态(例如,正常、按下、聚焦、禁用)选择要应用的其他几个可绘制资源之一
要替换按钮
背景,您需要首先使用自己的状态列表可绘制
。否则,您的按钮
将不会对单击事件或其他状态更改(例如被禁用)做出可视响应。然后,您可以在状态背景中加入一些填充,或者在按钮
小部件本身上添加填充,如您所见
我认为androidstudio应该采取一切必要的措施,使其在两个平台级别上都能正常工作
Android Studio假定您知道自己在做什么。没有硬性要求按钮
背景有这种填充,也没有硬性要求按钮
对用户来说是有意义的(与“嘿,为什么这个按钮在我点击它时看起来没有视觉响应?”)相反。在某些情况下,开发人员确实希望按钮
小部件没有填充,例如在分段列表控件类复合小部件的实现中
就我个人而言,我认为在按钮
背景中添加一些内部填充的决定是令人遗憾的。但是,这就是Android 1.0中的实现方式,谷歌已经选择保持这种方式,即使是新的主题,大概是为了向后兼容
如果我只设置backgroundTint,那么按钮在虚拟设备上有正确的填充,但没有正确的颜色
我没有玩过backgroundTint
和appcompat-v7
。您可能在那里看到一个bug。你可能会考虑用一个完整的例子来发布一个单独的问题,加上截图,以得到对这个特定关注的更具体的帮助。BTW,我提交给LIT警告你,当应用一个颜色作为背景到按钮。诚然,这不会直接解决你的“我的填充物去哪里了?”问题,但它有助于指出按钮背景通常不是简单的颜色。我发现:并将其更改为:android.support.v7.widget.AppCompatButton with:app:backgroundTint=“@color/colorPrimary”然后一切正常。我也遇到了这个问题:所以我想这可能并不总是有效?@马克:可能。正如我所写的,我没有用appcompat-v7玩过backgroundTint
。我的回答集中在直接设置背景的问题上。