Как центрировать drawableTop и текст вертикально на Button в Android?

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

<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", но это не кажется хорошей идеей. Я думаю, что это не сработает должным образом при разном разрешении/размере экрана.

Ответы

Ответ 1

Новый ответ

По-видимому, я неправильно понял вопрос. Ответ заключается в использовании:

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

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


Старый ответ

Вот мысль: оберните свою кнопку в FrameLayout. Soemthing like:

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

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

Ответ 2

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

Правильно.

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

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

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

Ответ 3

Вы можете использовать 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>

Ответ 4

<Button
  android:id="@+id/....."
  android:...............
  .......................
  android:gravity="center_horizontal"
/>

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

Ответ 5

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

Не забудьте изменить

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