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