จะแสดงข้อความบน 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" />

ฉันได้รับภาพ แต่ไม่มีข้อความ ฉันจะแสดงข้อความได้อย่างไร? โปรดช่วยฉันด้วย!

คำตอบ:


272

เนื่องจากคุณไม่สามารถใช้งานได้android:textฉันขอแนะนำให้คุณใช้ปุ่มปกติและใช้ปุ่มวาดแบบผสมอันใดอันหนึ่ง ตัวอย่างเช่น:

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

คุณสามารถใส่ drawable ทุกที่ที่คุณต้องการโดยใช้: drawableTop, drawableBottom, หรือdrawableLeftdrawableRight

UPDATE

สำหรับปุ่มนี้ก็ใช้งานได้ดีเช่นกัน พัตต์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 ไว้ในนั้น แต่หลังจากสร้างโปรไฟล์และเค้าโครงปุ่มด้านบนฉันประหยัดเวลาในการวัดได้เกือบ 30% เวลาในการจัดวาง 50% และ 15 -20% ใน Draw time บน FramLayout ของฉันและเปลี่ยนจาก 38 ออบเจ็กต์เป็น 26 ซึ่งเป็นการประหยัดที่ค่อนข้างมาก
Evan R.

3
@shim drawableTop จะวาง drawable ที่ด้านบนของปุ่ม drawableRight ที่ด้านล่าง ฯลฯ
Cristian

1
@RenanBandeira ใช่setCompoundDrawables*()วิธีการใช้งาน
Cristian

6
ฉันจะปรับขนาดภาพให้พอดีกับปุ่มได้อย่างไร? หรือจะปรับภาพให้พอดีกับปุ่มโดยอัตโนมัติ
Alston

3
คำถามเดียวกับ @Stallman จะใส่ภาพด้วยปุ่มได้อย่างไรและตั้งค่าไปทางซ้าย
ขัวง

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>

สิ่งนี้ดูเหมือนจะไม่ได้ผลกับ Lollipop แม้ว่าจะทำงานได้ดีกับผู้อื่น
Hong

2
ปัญหาของวิธีนี้คือข้อความจะไม่ได้รับผลกระทบจากสถานะปุ่ม (ปิดใช้งาน ฯลฯ ) ... เว้นแต่คุณจะดำเนินการด้วยตนเอง
TheOperator

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:backgroundแอตทริบิวต์ xml หรือประกาศจากคลาสด้วย.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 ด้วย ไม่เห็นเหตุผลว่าทำไมเราควรใช้ปุ่มหรือ ImageButton
แซม


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

ขออภัยฉันใส่รหัสผิด Wasn Imaget ImageButton เป็นเพียงปุ่ม
eloytxo

2

ฉันแก้ไขสิ่งนี้โดยวางImageButtonและวาง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(และดูdrawableTopหรือsetCompoundDrawablesWithIntrinsicBounds(int,int,int,int)).

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.