如何在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”垂直居中,但这似乎不是一个好主意。 我想这不能在不同的屏幕分辨率/大小上正常工作。

  • 在充气时,CardView失去了保证金
  • 剪切的button不会接收触摸input
  • 如何将一个无线电组添加到表内的单选button?
  • 是否有可能在android中定义XML的常量随configuration而变化
  • 如何在设置视图的alpha之前创build1秒的延迟?
  • 如何在Android Studio中打开另一个活动的按钮?
  • 如何将本地xml文件转换为org.ksoap2.serialization.SoapObject?
  • 获取二进制XML文件行#141:尝试在空对象引用上调用虚方法'boolean java.lang.String.equals(java.lang.Object)'
  • 新的答案

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

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