如何在Android中的Button上垂直居中drawableTop和文本?

grz*_*aks 15 xml layout android button

我将Button定义如下:

<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"
/>
Run Code Online (Sandbox Code Playgroud)

问题是'drawableTop'图像与Button视图的顶部边框对齐.我想将它(与文本标签一起)垂直放在按钮上.

'android:gravity'似乎只适用于文本标签.它不会影响'drawableTop'定位.

我能够使用'android:paddingTop'垂直居中 - 但这似乎不是一个好主意.我猜它在不同的屏幕分辨率/大小上无法正常工作.

Fel*_*lix 12

新答案

显然我误解了这个问题.答案是使用:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    style="@android:style/Widget.Button">
Run Code Online (Sandbox Code Playgroud)

......并附上一个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>
Run Code Online (Sandbox Code Playgroud)

顺便问一下,怎么了android:layout_width="0dip"?似乎不对.


Com*_*are 9

'android:gravity'似乎只适用于文本标签.它不会影响'drawableTop'定位.

正确.

我能够使用'android:paddingTop'垂直居中 - 但这似乎不是一个好主意.我猜它在不同的屏幕分辨率/大小上无法正常工作.

您可以通过使用维度资源来解决此问题.

但是,除了通过填充之外,您不能"在Button上垂直居中drawableTop和文本".可绘制的功能Button不是很容易配置.