Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在按钮上设置android:background会导致L/R填充丢失?_Android_Button_Background_Android Studio 2.2 - Fatal编程技术网

为什么在按钮上设置android:background会导致L/R填充丢失?

为什么在按钮上设置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系统上,我想要一个

我将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系统上,我想要一个快速的仿真器)上运行该应用程序,或者在装有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
。我的回答集中在直接设置背景的问题上。