Làm cách nào để hiển thị văn bản trên ImageButton?


127

Tôi có một ImageButtonvà tôi muốn hiển thị một văn bản và một hình ảnh trên đó. Nhưng khi tôi thử trình giả lập:

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

Tôi nhận được hình ảnh nhưng không có văn bản. Làm thế nào tôi có thể hiển thị văn bản? Làm ơn giúp tôi!

Câu trả lời:


271

Vì bạn không thể sử dụng, android:texttôi khuyên bạn nên sử dụng một nút bình thường và sử dụng một trong các ngăn kéo ghép. Ví dụ:

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

Bạn có thể đặt bất cứ nơi nào có thể vẽ được bạn muốn bằng cách sử dụng: drawableTop, drawableBottom, drawableLefthoặc drawableRight.

CẬP NHẬT

Đối với một nút này quá hoạt động khá tốt. Đặt android:backgroundlà tốt!

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

Tôi chỉ có vấn đề này và đang làm việc hoàn hảo.


2
Tùy chọn này hoạt động tốt nhất, trừ khi bạn cần một số cách bố trí nút trông điên rồ, giống như một hình ảnh được bao phủ bởi hai bài phỏng vấn. Ban đầu tôi đã thử một đối tượng bố cục được xác định là widget.button, sau đó đặt chế độ xem hình ảnh và chế độ xem văn bản vào đó, nhưng sau khi định hình nó và bố cục Nút ở trên, tôi đã tiết kiệm gần 30% thời gian đo, 50% về thời gian bố trí và 15% -20% trong thời gian rút tiền trên FramLayout của tôi và chuyển từ 38 đối tượng xuống còn 26. đó là một khoản tiết kiệm khá đáng kể.
Evan R.

3
@shim drawableTop sẽ đặt drawable ở đầu nút, drawableRight ở phía dưới, v.v.
Cristian

1
@RenanBandeira có, setCompoundDrawables*()phương pháp sử dụng
Cristian

6
Làm thế nào tôi có thể thu nhỏ hình ảnh để phù hợp với nút? Hoặc nó sẽ tự động điều chỉnh hình ảnh cho phù hợp với nút.
Alston

3
Câu hỏi tương tự như @Stallman, làm thế nào để khớp hình ảnh với nút và đặt nó sang trái?
Khương

63

Về mặt kỹ thuật có thể đặt chú thích vào ImageButtonnếu bạn thực sự muốn làm điều đó. Chỉ cần đặt TextViewqua ImageButtonsử dụng FrameLayout. Chỉ cần nhớ để không làm cho Textviewnhấp chuột.

Thí dụ:

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

Điều này dường như không hoạt động trên Lollipop mặc dù hoạt động hoàn hảo trên những người khác.
Hồng

2
Vấn đề với cách tiếp cận này là văn bản không bị ảnh hưởng bởi trạng thái nút (bị tắt, v.v.) ... trừ khi bạn làm điều đó bằng tay.
TheOperator

9

Tôi cần phát triển nút cài đặt và đăng xuất, tôi đã sử dụng đoạn mã dưới đây. nhập mô tả hình ảnh ở đây

    <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

Trên thực tế, android:textkhông phải là một đối số được chấp nhận bởi ImageButton nhưng, Nếu bạn đang cố lấy một nút có nền được chỉ định (không phải mặc định của Android), hãy sử dụng android:backgroundthuộc tính xml hoặc khai báo nó từ lớp với.setBackground();


4

Bạn có thể sử dụng LinearLayoutthay vì sử dụng Buttonđó là một sự sắp xếp tôi đã sử dụng trong ứng dụng của mình

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

Giải pháp tuyệt vời! onClick cũng hoạt động hoàn hảo trên linearLayout. Không thấy lý do tại sao chúng ta nên sử dụng Nút hoặc ImageButton
Sam

2

thay vào đó, bạn có thể sử dụng Buttonthuộc tính thông thường và android: drawableTop (hoặc trái, phải, dưới).


2

Cách tốt nhất:

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

2
Điều này dường như không khác với những gì OP ban đầu đã thử.
PhonicUK

Xin lỗi, tôi nhầm mã của tôi. Imagenutton Wasn, chỉ là Nút.
eloytxo

2

Tôi đã giải quyết điều này bằng cách đặt ImageButtonTextViewbên trong một LinearLayoutvới hướng dọc. Hoạt động tuyệt vời!

<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

Đây là một ví dụ về vòng tròn đẹp:

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>

Và sau đó là nút trong tệp xml của bạn:

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

0

ImageButtonkhông thể có text(hoặc, ít nhất, android:textkhông được liệt kê trong các thuộc tính của nó).

Thủ thuật là:

Có vẻ như bạn cần sử dụng Button(và nhìn vào drawableTophoặc setCompoundDrawablesWithIntrinsicBounds(int,int,int,int)).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.