Wie zeige ich den Text auf einem ImageButton?

127

Ich habe eine ImageButtonund ich möchte einen Text und ein Bild darauf zeigen. Aber wenn ich den Emulator anprobiere:

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

Ich bekomme das Bild aber ohne Text. Wie kann ich den Text anzeigen? Bitte hilf mir!

Võ Quang Hòa
quelle

Antworten:

271

Da Sie nicht verwenden können, android:textempfehle ich Ihnen, einen normalen Knopf und eine der zusammengesetzten Zeichen zu verwenden. Zum Beispiel:

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

Sie können die ziehbar setzen , wo immer Sie wollen , indem Sie: drawableTop, drawableBottom, drawableLeftoder drawableRight.

AKTUALISIEREN

Auch für einen Button funktioniert das ganz gut. Putten android:backgroundist in Ordnung!

<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" />

Ich hatte gerade dieses Problem und funktioniert perfekt.

Cristian
quelle
2
Diese Option funktioniert am besten, es sei denn, Sie benötigen ein verrückt aussehendes Schaltflächenlayout, z. B. ein Bild, das von zwei Textansichten umgeben ist. Ich habe ursprünglich ein Layout-Objekt ausprobiert, das als widget.button definiert ist, und dann eine Bildansicht und eine Textansicht eingefügt. Nachdem ich dieses und das obige Schaltflächenlayout profiliert hatte, habe ich fast 30% an Messzeit, 50% an Layoutzeit und 15% gespart -20% in der Zeichenzeit auf meinem FramLayout und von 38 Objekten auf 26 gesunken. Das ist eine ziemlich erhebliche Einsparung.
Evan R.
3
@shim drawableTop platziert das Drawable oben auf der Schaltfläche, drawableRight unten usw.
Cristian
1
@ RenanBandeira ja, setCompoundDrawables*()Methoden verwenden
Cristian
6
Wie kann ich das Bild an die Schaltfläche anpassen? Oder das Bild wird automatisch an die Schaltfläche angepasst.
Alston
3
Gleiche Frage wie bei @Stallman, wie man das Bild mit der Schaltfläche anpasst und es nach links setzt?
Khuong
63

Es ist technisch möglich, eine Beschriftung auf eine zu setzen, ImageButtonwenn Sie es wirklich wollen. Setzen Sie einfach ein TextViewüber die ImageButtonVerwendung FrameLayout. Denken Sie daran, das TextviewKlicken nicht anklickbar zu machen .

Beispiel:

<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>
OnkelIstvan
quelle
Dies scheint bei Lollipop nicht zu funktionieren, funktioniert aber bei anderen perfekt.
Hong
2
Das Problem bei diesem Ansatz ist, dass der Text nicht vom Schaltflächenstatus (deaktiviert usw.) Betroffen ist ... es sei denn, Sie tun dies manuell.
TheOperator
9

Leute, ich muss die Schaltfläche zum Einstellen und Abmelden entwickeln. Ich habe den folgenden Code verwendet. Geben Sie hier die Bildbeschreibung ein

    <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" />
Naveed Ahmad
quelle
4

Eigentlich android:textwird kein Argument von ImageButton aber akzeptiert . Wenn Sie versuchen, eine Schaltfläche mit einem bestimmten Hintergrund zu erhalten (nicht Android-Standard), verwenden Sie das android:backgroundXML-Attribut oder deklarieren Sie es aus der Klasse mit.setBackground();

Samuel
quelle
4

Sie können ein Arrangement verwenden, LinearLayoutanstatt es zu verwenden Button, das ich in meiner App verwendet habe

 <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>
mxml
quelle
Tolle Lösung! onClick funktioniert auch perfekt mit LinearLayout. Sehen Sie keinen Grund, warum wir einen Button oder ImageButton verwenden sollten
Sam
2

Sie können Buttonstattdessen ein reguläres und das android: drawableTop-Attribut (oder links, rechts, unten) verwenden.

Nathan Schwermann
quelle
2

Bester Weg:

<Button 
android:text="OK" 
android:id="@+id/buttonok" 
android:background="@drawable/buttonok"
android:layout_width="match_parent" 
android:layout_height="wrap_content"/>
eloytxo
quelle
2
Dies scheint sich nicht von dem zu unterscheiden, was das OP ursprünglich versucht hat.
PhonicUK
Entschuldigung, ich habe meinen Code falsch verstanden. War nicht ImageButton, war nur Button.
Eloytxo
2

Ich habe dies gelöst, indem ich das ImageButtonund TextViewin ein LinearLayoutmit vertikaler Ausrichtung gesetzt habe. Funktioniert super!

<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>
Rafael Dvl
quelle
1

Hier ist ein schönes Kreisbeispiel:

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>

Und dann die Schaltfläche in Ihrer XML-Datei:

<Button
    android:id="@+id/btn_send"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:background="@drawable/circle"
    android:text="OK"/>
K - Die Toxizität in SO nimmt zu.
quelle
0

ImageButtonkann nicht haben text(oder ist zumindest android:textnicht in seinen Attributen aufgeführt).

Der Trick ist:

Es sieht so aus, als müssten Sie verwenden Button(und schauen Sie sich drawableTopoder an setCompoundDrawablesWithIntrinsicBounds(int,int,int,int)).

Ajay Venugopal
quelle