android 如何在按钮中设置图像

How to set the image in button in android

我在 android 工作时总是遇到这个问题,那就是在按钮中设置图像。我有一个我想在按钮中设置的图像,所以我有这个按钮图像的多个分辨率用于不同的桶,以支持多个屏幕尺寸。

以下是我的图片,分辨率为85*85

现在,当我想在按钮中设置它时,我的图像有点变形。看起来图像的宽度比图像的高度大,但实际上并非如此。在按钮中设置图像后,让我与您分享图片。此屏幕短片来自 android 三星 galaxy s4 设备,它是 xxhd 设备

现在您可以很容易地看到它看起来有多糟糕。

这就是我在 xml

中的设置方式
<Button
            android:id="@+id/btn_flip_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/flip_image"
            />

但是当我在 Imageview 中设置此图像时,一切看起来都和预期的一样好。所以问题不在图像也不在 xml 而是使用 Button 的方式。那么谁能告诉我在 button 或 Imagebutton 中使用图像的最佳方式是什么。

请告诉我为什么当我尝试在按钮中设置图像时它总是发生,而最后当我使用图像视图时我总是得到我想要的结果。

(How ever using Imageview make me loose the touch effect that the button has naturally and by default.)

**Edit1 ** 这是我在 xml 中使用按钮

的部分
<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|top"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:orientation="vertical"
        android:background="@drawable/menu_bg"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:gravity="center"
        >

        <Button
            android:id="@+id/btn_flip_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/flip_image"

            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="5dp"
            />

        <Button
            android:id="@+id/btn_flip_suit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/flip_suit" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="5dp"
            />

        <Button
            android:id="@+id/btn_change_suit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/change_suit" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="5dp"
            />

        <Button
            android:id="@+id/btn_share"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:layout_height="wrap_content"

            android:background="@drawable/share_btn" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="5dp"
           />

        <Button
            android:id="@+id/btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"

            android:background="@drawable/save_image"

            />
    </LinearLayout>

所以任何人都请让我明白我做错了什么或者将 Button 与自定义图像一起使用的最佳方式是什么。 ??

试试这个,

你可以使用

        android:drawableLeft="@drawable/ic_launcher"//image for left side in button
        android:drawableTop="@drawable/ic_launcher"//image for top side in button
        android:drawableBottom="@drawable/ic_launcher"//image for bottom side in button
        android:drawableRight="@drawable/ic_launcher"//image for right side in button

你的代码是。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/btn_flip_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/flip_image" />

</RelativeLayout>

使用android:drawableTop代替android:src

我测试了你的代码,没有问题...

作为你的图片宽度问题,这是由于屏幕分辨率在不同设备上造成的,为此你可以将你的Linear Layout放在ScrollView

滚动视图之前的代码输出:

<ScrollView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left|top"
    android:orientation="vertical"
    android:gravity="center">
    <Button
        android:id="@+id/btn_flip_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/flip"> 
   </LinearLayout>
</ScrollView>

滚动视图后的输出:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@mipmap/ic_launcher"/>

</LinearLayout>

您也可以使用

android:drawableBottom ="@mipmap/ic_launcher"
android:drawableTop="@mipmap/ic_launcher"
 android:drawableRight="@mipmap/ic_launcher"

您也可以尝试使用 ImageView 而不是 Button

 <ImageView
        android:id="@+id/btn_flip_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/flip_image" />

我总是使用背景,因为它不会改变图像尺寸:

<Button
        android:id="@+id/btn_flip_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/flip_image" />

你可以这样做:

 <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackground"
        android:src="@drawable/your_img" />

在这种方法中,您还可以使用 ImageView 而不是 ImageButton