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

텍스트는 없지만 이미지를 얻습니다. 텍스트를 어떻게 표시 할 수 있습니까? 도와주세요!

답변:


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

당신은 당신이 원하는 목적지까지 사용하여 당김을 넣을 수 있습니다 : drawableTop, drawableBottom, drawableLeft또는 drawableRight.

최신 정보

버튼의 경우도 이것도 꽤 잘 작동합니다. 퍼팅 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
이 옵션은 두 개의 텍스트 뷰로 샌딩 된 이미지와 같은 미친 모양의 버튼 레이아웃이 필요하지 않은 한 가장 효과적입니다. 원래 widget.button으로 정의 된 레이아웃 객체를 시도한 다음 이미지 뷰와 텍스트 뷰를 넣었지만 프로파일 링 한 후 위의 버튼 레이아웃을 사용하면 측정 시간이 거의 30 %, 레이아웃 시간이 50 %, 15 FramLayout에서 Draw time -20 %로 38 개의 개체에서 26 개의 개체로 감소했습니다. 이는 상당히 상당한 절감 효과입니다.
Evan R.

3
@shim drawableTop은 버튼 상단에 드로어 블을 배치하고 하단에 drawableRight를 배치합니다.
Cristian

1
@RenanBandeira 네, 사용 setCompoundDrawables*()방법
Cristian

6
버튼에 맞게 이미지 크기를 조정하려면 어떻게해야합니까? 또는 버튼에 맞게 이미지를 자동으로 조정합니다.
Alston

3
@Stallman과 같은 질문, 버튼으로 이미지를 맞추고 왼쪽으로 설정하는 방법은 무엇입니까?
Khuong

63

ImageButton실제로 원하는 경우 캡션을 기술적으로 사용할 수 있습니다. 를 사용하여 TextView오버 오버하십시오 . 클릭 할 수 없도록하십시오 .ImageButtonFrameLayoutTextview

예:

<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: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 : drawableTop 속성 (또는 왼쪽, 오른쪽, 아래쪽)을 사용할 수 있습니다.


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

죄송합니다. 코드가 잘못되었습니다. 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.