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

时间:2010-04-15 10:50:14

标签: xml android layout 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视图的顶部边框对齐。我想将它(与文本标签一起)垂直放在按钮上。

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

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

5 个答案:

答案 0 :(得分:12)

新答案

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

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

...并在其中附上ImageViewTextView


旧答案

这是一个想法:将您的按钮包装在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"有什么用?似乎不对。

答案 1 :(得分:9)

  

'android:gravity'似乎只能起作用   在文本标签上。它不会影响   'drawableTop'定位。

正确。

  

我能够将它垂直居中   使用'android:paddingTop' - 但是那个   似乎不是一个好主意。一世   猜猜它无法正常工作   不同的屏幕分辨率/尺寸。

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

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

答案 2 :(得分:0)

您可以将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>

答案 3 :(得分:-1)

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

我很好。

答案 4 :(得分:-2)

使用android:drawableTop="@drawable/Icon"代替背景

别忘了改变

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