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

我有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" /> 

问题是“drawableTop”图像与Button视图的顶部边界alignment。 我想将它(与文本标签一起)垂直放置在button上。

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

我能够使用“android:paddingTop”垂直居中,但这似乎不是一个好主意。 我想这不能在不同的屏幕分辨率/大小上正常工作。

Solutions Collecting From Web of "如何在Android中的Button上垂直居中drawableTop和文本?"

新的答案

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

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

…并附上一个ImageView和一个TextView里面。


老答案

这里有一个想法:将你的button包装在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" ? 看起来不正确。

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

正确。

我能够使用“android:paddingTop”垂直居中,但这似乎不是一个好主意。 我猜这不能在不同的屏幕分辨率/尺寸下正常工作。

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

但是,除了通过填充以外,不能“在button上居中绘制顶部和文本”。 Button的可绘制function不是非常可configuration的。

你可以使用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> 
 <Button android:id="@+id/....." android:............... ....................... android:gravity="center_horizontal" /> 

我没事的。

使用android:drawableTop="@drawable/Icon"而不是背景

不要忘记改变

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