为啥按钮背景缩放不正确?

Posted

技术标签:

【中文标题】为啥按钮背景缩放不正确?【英文标题】:Why button background is scaled incorrectly?为什么按钮背景缩放不正确? 【发布时间】:2016-02-22 19:35:51 【问题描述】:

我将项目 SDK 版本从 10 升级到 23,同时将项目从 Eclipse 移植到 android Studio。

按钮可绘制的 xml 和 png 图像保持不变。但是按钮背景看起来缩放不正确。

按钮状态列表:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ok_button_pressed"
      android:state_pressed="true" />
<item android:drawable="@drawable/ok_button_normal"
      android:state_focused="true" />
<item android:drawable="@drawable/ok_button_normal" />
</selector>

对话框布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:padding="10dp" 
    android:background="#669900"
    android:gravity="center_horizontal"
    >

    <TextView android:id="@+id/alarm_text"
              android:layout_
              android:layout_
              android:textColor="#FFF"
              android:textSize="16dp"
              />

    <RelativeLayout
        android:id="@+id/linearLayout1"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:gravity="center" 
        android:padding="0dp">

    <Button
        android:id="@+id/ok_alarm_button"
        android:layout_
        android:layout_
        android:background="@drawable/ok_button"
        android:layout_alignParentLeft="true"
    />

    <Button
        android:id="@+id/cancel_alarm_button"
        android:layout_
        android:layout_
        android:background="@drawable/cancel_button"
        android:layout_alignParentRight="true"

    />
   </RelativeLayout>

</LinearLayout>

按钮背景(按下版本):

升级前:

升级后:

【问题讨论】:

使用 ImageButton 而不是 Button。按钮将缩放图像以适合内部。在 ImageButton 中,您可以指定 ScaleType。 设置按钮的源代码而不是像这样的背景:android:src="@drawable/ok_button" 用 imageView 替换你的按钮 @Anjali src 不可用于 Button,可用于 ImageView 和 ImageButton。 @DhavalPatel - ImageButton 解决了我的问题。 【参考方案1】:

在您当前的场景中,使用ImageButton 而不是Button。根据ImageButton official document,ImageButton 显示一个Button 和一个Image (instead of text),用户可以是pressedclicked

如果您将图像设置为backgroundButton,则Button 将在X 和Y 方向独立缩放图像,以便图像的宽度和高度与Button 大小完全匹配。这可能会改变图像的纵横比。这发生在你的情况下。

在其他情况下,如果您将ImageButtonImage 设置为background 并将scaleType 设置为“centerInside”,将统一缩放图像(保持图像的纵横比),以便两个尺寸(宽度和图像的高度)将等于或小于视图的相应尺寸(减去填充)。

【讨论】:

【参考方案2】:

你能试试这个方法吗,对我的临时图像有用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_
    android:layout_
    android:background="#669900"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="10dp">

    <TextView
        android:id="@+id/alarm_text"
        android:layout_
        android:layout_
        android:textColor="#FFF"
        android:textSize="16dp" />

    <RelativeLayout
        android:id="@+id/linearLayout1"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:padding="0dp">

        <Button
            android:id="@+id/ok_alarm_button"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:background="@drawable/ok_button"
            android:minHeight="0dp"
            android:minWidth="0dp" />

        <Button
            android:id="@+id/cancel_alarm_button"
            android:layout_
            android:layout_
            android:layout_alignParentRight="true"
            android:background="@drawable/cancel_button"
            android:minHeight="0dp"
            android:minWidth="0dp"/>
    </RelativeLayout>
</LinearLayout>

【讨论】:

【参考方案3】:

我使用 ImageButton 而不是 Button,它解决了我的问题。

【讨论】:

以上是关于为啥按钮背景缩放不正确?的主要内容,如果未能解决你的问题,请参考以下文章

如何缩放按钮的背景?

将带有图像背景的 UI Button 缩放为 iphone 大小

为啥使用 SwiftUI 按钮的图像背景不显示在工具栏中?

为啥我的 UIBarButtonItem 按钮在某些设备上获得背景颜色?

将视图背景设置为能够缩放的图像

添加背景图像时,Xamarin android网格无法正确缩放单元格