Android: объединение текста и изображения с помощью кнопки или кнопки ImageButton - PullRequest
517 голосов
/ 07 октября 2009

Я пытаюсь разместить изображение (в качестве фона) на кнопке и добавить динамически, в зависимости от того, что происходит во время выполнения, некоторый текст над / над изображением.

Если я использую ImageButton, у меня даже нет возможности добавить текст. Если я использую Button, я могу добавить текст, но определить только изображение с android:drawableBottom и подобными атрибутами XML, как определено здесь .

Однако эти атрибуты объединяют текст и изображение только в x- и y-измерениях, то есть я могу рисовать изображение вокруг своего текста, но не под / под моим текстом (с осью z, определенной как выходящая из дисплея) .

Есть предложения, как это сделать? Одна идея состоит в том, чтобы либо расширить Button или ImageButton и переопределить draw() -метод. Но с моим текущим уровнем знаний я действительно не знаю, как это сделать (2D-рендеринг). Может быть, кто-то с большим опытом знает решение или хотя бы несколько указателей для запуска?

Ответы [ 15 ]

6 голосов
/ 04 февраля 2019

Важное обновление

Не используйте обычный android:drawableLeft и т. Д. ... с векторными объектами, иначе это будет сбой в более низких версиях API . (Я сталкивался с этим в живом приложении)

Для векторного рисования

Если вы используете векторное рисование, вы должны

  • Вы перешли на AndroidX? если нет, вы должны сначала перейти на AndroidX. Это очень просто, смотрите что такое androidx и как его перенести?
  • Он был выпущен в версии 1.1.0-alpha01, поэтому версия приложения должна составлять не менее 1.1.0-alpha01. Текущая последняя версия 1.1.0-alpha02, используйте последние версии для большей надежности, см. Примечания к выпуску - ссылка .

    implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'

  • Использование AppCompatTextView / AppCompatButton / AppCompatEditText

  • Использование app:drawableLeftCompat, app:drawableTopCompat, app:drawableRightCompat, app:drawableBottomCompat, app:drawableStartCompat и app:drawableEndCompat

Для обычного рисования

Если вам не нужно рисовать вектор, вы можете

  • использование android:drawableLeft, android:drawableRight, android:drawableBottom, android:drawableTop
  • Вы можете использовать обычные TextView, Button & EditText или AppCompat классы.

Вы можете достичь Вывод , как показано ниже -

output

6 голосов
/ 14 марта 2013
<Button
     android:id="@+id/groups_button_bg"
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="Groups"
     android:drawableTop="@drawable/[image]" />


android:drawableLeft
android:drawableRight
android:drawableBottom
android:drawableTop

http://www.mokasocial.com/2010/04/create-a-button-with-an-image-and-text-android/

5 голосов
/ 23 марта 2015

Этот код прекрасно работает для меня

<LinearLayout
    android:id="@+id/choosePhotosView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    android:clickable="true"
    android:background="@drawable/transparent_button_bg_rev_selector">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/choose_photo"/>

     <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:text="@string/choose_photos_tv"/>

</LinearLayout>
0 голосов
/ 01 января 2018
    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/temp"
        />
0 голосов
/ 28 июня 2013

Вы можете использовать это:

  <Button
                    android:id="@+id/reset_all"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="5dp"
                    android:layout_weight="1"
                    android:background="@drawable/btn_med"
                    android:text="Reset all"
                    android:textColor="#ffffff" />

                <Button
                    android:id="@+id/undo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:layout_weight="1"
                    android:background="@drawable/btn_med"
                    android:text="Undo"
                    android:textColor="#ffffff" />

в том, что я поставил изображение как background, а также добавил текст ..!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...