Как центрировать drawableTop и текст вертикально на кнопке в Android? - PullRequest
15 голосов
/ 15 апреля 2010

У меня есть кнопка, определенная следующим образом:

<Button
 android:drawableTop="@drawable/ico"
 android:gravity="center"
 android:id="@+id/StartButton2x2"
 android:text="@string/Widget2x2StartBtnLabel"
 android:layout_width="0dip" 
 android:layout_height="fill_parent"
 android:layout_weight="1" 
 android:background="@drawable/widgetbtn_bg"
/>

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

«android: gravity», кажется, работает только на текстовой метке. Это не влияет на позиционирование drawableTop.

Мне удалось отцентрировать его по вертикали, используя 'android: paddingTop' - но это не очень хорошая идея. Я думаю, что это не будет работать должным образом на другом разрешении экрана / размере.

Ответы [ 5 ]

12 голосов
/ 15 апреля 2010

Новый ответ

Видимо, я неправильно понял вопрос. Ответ должен использовать:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    style="@android:style/Widget.Button">

... и заключите ImageView и TextView внутри.


Старый ответ

Вот мысль: оберните вашу кнопку в FrameLayout. Что-то вроде:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:foreground="@drawable/ico"
    android:foregroundGravity="center">
    <Button
        android:gravity="center_vertical"
        android:id="@+id/StartButton2x2"
        android:text="@string/Widget2x2StartBtnLabel"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1" 
        android:background="@drawable/widgetbtn_bg" />
</FrameLayout>

Кстати, что случилось с android:layout_width="0dip"? Не кажется правильным.

9 голосов
/ 15 апреля 2010

«Android: гравитация», кажется, работает только на текстовой метке. Не влияет позиционирование 'drawableTop'.

Correct.

Мне удалось отцентрировать его вертикально используя 'Android: PaddingTop' - но это не кажется хорошей идеей. я думаю, это не будет работать должным образом Разное разрешение экрана / размер.

Возможно, вам удастся решить эту проблему, используя ресурсы измерений.

Однако, кроме использования отступов, вы не можете "центрировать drawableTop и текст вертикально на кнопке". Функция рисования Button не очень настраивается.

0 голосов
/ 12 июня 2014

Вы можете использовать textview со своим свойством.

<LinearLayout
            style="@android:style/Widget.Button"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/.."
                android:text="" />
        </LinearLayout>
0 голосов
/ 26 мая 2014
<Button
  android:id="@+id/....."
  android:...............
  .......................
  android:gravity="center_horizontal"
/>

Я был в порядке с этим.

0 голосов
/ 27 июля 2012

Используйте android:drawableTop="@drawable/Icon" вместо фона

Не забудьте поменять

android:layout_width="fill_parent"
android:layout_height="wrap_content"
...