如何在ImageButton上显示文本?


127

我有一个ImageButton,我想在上面显示文本和图像。但是当我尝试模拟器时:

<ImageButton 
    android:text="OK" 
    android:id="@+id/buttonok" 
    android:src="@drawable/buttonok"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" />

我得到图像但没有文本。如何显示文字?请帮我!

Answers:


271

由于您无法使用,android:text我建议您使用普通按钮并使用复合画板之一。例如:

<Button 
    android:id="@+id/buttonok" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/buttonok"
    android:text="OK"/>

您可以通过把绘制无论你想:drawableTopdrawableBottomdrawableLeftdrawableRight

更新

对于按钮,这也很好用。推杆android:background很好!

<Button
    android:id="@+id/fragment_left_menu_login"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="@string/login_string" />

我刚遇到这个问题,并且运行良好。


2
除非您需要某种疯狂的按钮布局,例如由两个textview覆盖的图像,否则此选项最有效。我最初尝试了一个定义为widget.button的布局对象,然后在其中放置了imageview和textview,但是在对它们进行剖析以及上面的Button布局之后,我节省了近30%的测量时间,50%的布局时间以及15在我的FramLayout上,绘制时间减少了-20%,从38个对象减少到26个。这是相当可观的节省。
Evan R.

3
@shim drawableTop将放置在绘制按钮的顶部,drawableRight底部等
克里斯蒂安·

1
@RenanBandeira是的,有用的setCompoundDrawables*()方法
Cristian

6
如何缩放图像以适合按钮?否则它将自动调整图像以适合按钮。
Alston 2014年

3
与@Stallman相同的问题,如何使用按钮使图像合适并将其设置在左侧?
hu 2015年

63

ImageButton如果您确实想这样做,在技​​术上可以给它加上字幕。只要把一个TextView过度ImageButton使用FrameLayout。请记住不要使Textview可点击。

例:

<FrameLayout>
    <ImageButton
        android:id="@+id/button_x"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@null"
        android:scaleType="fitXY"
        android:src="@drawable/button_graphic" >
    </ImageButton>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:clickable="false"
        android:text="TEST TEST" >
    </TextView>
</FrameLayout>

这似乎不适用于棒棒糖,但可以完美地适用于其他人。

2
这种方法的问题是文本不受按钮状态(禁用等)的影响...除非您手动进行操作。
TheOperator's

9

伙计们,我需要开发设置和注销按钮,我使用了以下代码。 在此处输入图片说明

    <Button
        android:id="@+id/imageViewLogout"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/size_30dp"
        android:layout_alignParentLeft="true"
        android:text="Settings"
        android:drawablePadding="10dp"
        android:background="@android:color/transparent"
        android:layout_alignParentBottom="true"
        android:drawableTop="@drawable/logout" />

4

实际上,android:text它不是一个参数,ImageButton 但是,如果您尝试获取具有指定背景的按钮(不是Android默认设置),请使用android:backgroundxml属性,或使用以下方法从类中声明该属性.setBackground();


4

您可以使用LinearLayout而不是Button我在我的应用中使用的安排

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:background="@color/mainColor"
        android:orientation="horizontal"
        android:padding="10dp">

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@drawable/ic_cv"
            android:textColor="@color/offBack"
            android:textSize="20dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="@string/cartyCv"
            android:textColor="@color/offBack"
            android:textSize="25dp" />

    </LinearLayout>

很好的解决方案!onClick也可以在LinearLayout上完美运行。没有看到为什么我们应该使用Button或ImageButton的原因
Sam


2

最好的办法:

<Button 
android:text="OK" 
android:id="@+id/buttonok" 
android:background="@drawable/buttonok"
android:layout_width="match_parent" 
android:layout_height="wrap_content"/>

2
这似乎与OP最初尝试的没什么不同。
PhonicUK 2012年

抱歉,我弄错了我的代码。不是ImageButton,只是Button。
eloytxo 2012年

2

我通过将ImageButtonand和TextView放置在LinearLayout垂直方向上来解决此问题。很棒!

<LinearLayout
    android:id="@+id/linLayout"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/camera_ibtn"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:background="@drawable/camera" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/take_pic"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

</LinearLayout>

1

这是一个不错的圈子示例:

drawable/circle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid
        android:color="#ff87cefa"/>

    <size
        android:width="60dp"
        android:height="60dp"/>
</shape>

然后是您的xml文件中的按钮:

<Button
    android:id="@+id/btn_send"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:background="@drawable/circle"
    android:text="OK"/>

0

ImageButton不能拥有text(或至少android:text没有在其属性中列出)。

窍门是:

看来您需要使用Button(并查看drawableTopsetCompoundDrawablesWithIntrinsicBounds(int,int,int,int))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.