Як показати текст на 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"/>

Ви можете помістити Drawable туди , куди ви хочете за допомогою: 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 -20% за час малювання на моєму FramLayout і піднявся від 38 об’єктів до 26. Це досить значна економія.
— Еван Р.

3
@shim dravableTop розмістить зображення, що виводиться у верхній частині кнопки, DravableRight внизу тощо.
— Cristian

1
@RenanBandeira так, Uset setCompoundDrawables*()методи
— Крістіан

6
Як я можу масштабувати зображення, щоб відповідати кнопці? Або воно автоматично регулює зображення, щоб воно відповідало кнопці.
— Елстон

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, хоча ідеально працює на інших.
— Гонг

2
Проблема такого підходу полягає в тому, що на текст не впливає стан кнопки (вимкнено тощо) ... якщо ви не зробите це вручну.
— Оператор

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: dravableTop (або ліворуч, праворуч, знизу).


2

Кращий спосіб:

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

2
Це, мабуть, нічим не відрізняється від того, що спочатку намагалася ОП.
— PhonicUK

Вибачте, я помиляюся зі своїм кодом. Це був не ImageButton, а лише Button.
— 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)).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.