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

Posted

技术标签:

【中文标题】如何在Android中的Button上垂直居中drawableTop和文本?【英文标题】:How to center drawableTop and text vertically on the Button in Android? 【发布时间】:2011-02-08 07:55:15 【问题描述】:

我的按钮定义如下:

<Button
 android:drawableTop="@drawable/ico"
 android:gravity="center"
 android:id="@+id/StartButton2x2"
 android:text="@string/Widget2x2StartBtnLabel"
 android:layout_ 
 android:layout_
 android:layout_weight="1" 
 android:background="@drawable/widgetbtn_bg"
/>

问题在于“drawableTop”图像与 Button 视图的上边框对齐。我想将它(连同文本标签)垂直居中在按钮上。

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

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

【问题讨论】:

drawableTop,就像它的名字所暗示的那样,总是将drawable与Button的顶部对齐。试试 drawableLeft,或者如果你想要它在文本后面,android:background。 【参考方案1】:

新答案

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

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical"
    style="@android:style/Widget.Button">

...并在里面附上ImageViewTextView


旧答案

这是一个想法:将您的按钮包装在 FrameLayout 中。有点像:

<FrameLayout
    android:layout_
    android:layout_
    android:foreground="@drawable/ico"
    android:foregroundGravity="center">
    <Button
        android:gravity="center_vertical"
        android:id="@+id/StartButton2x2"
        android:text="@string/Widget2x2StartBtnLabel"
        android:layout_
        android:layout_
        android:layout_weight="1" 
        android:background="@drawable/widgetbtn_bg" />
</FrameLayout>

顺便说一句,android:layout_width="0dip" 怎么了?好像不太对。

【讨论】:

这几乎可以工作。但效果有点不同 - 现在我的图标顶部有我的标签。我想将它放在图标下方,但两者都以按钮为中心。 @Felix,您在使用 android:layout_weight 时使用 android:layout_width="0dp"。这告诉 Android 使用权重根据封闭布局中可用空间的大小来计算大小。【参考方案2】:

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

正确。

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

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

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

【讨论】:

好的,那我试试填充。谢谢 SO 确实需要一个功能来为正确的答案 +1,但如果不喜欢答案则为 -1。 在按钮布局中使用 android:paddingTop 使我可以垂直居中 drawableTop。为正确答案 +1。【参考方案3】:

您可以使用 textview 及其属性。

<LinearLayout
            style="@android:style/Widget.Button"
            android:layout_
            android:layout_
            android:orientation="vertical" >

            <TextView
                android:layout_
                android:layout_
                android:drawableLeft="@drawable/.."
                android:text="" />
        </LinearLayout>

【讨论】:

【参考方案4】:
<Button
  android:id="@+id/....."
  android:...............
  .......................
  android:gravity="center_horizontal"
/>

我没问题。

【讨论】:

【参考方案5】:

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

别忘了改变

android:layout_
android:layout_

【讨论】:

以上是关于如何在Android中的Button上垂直居中drawableTop和文本?的主要内容,如果未能解决你的问题,请参考以下文章

使文本在按钮中垂直居中[重复]

怎样让一行中的 文字 input输入框 按钮button它们在同一个高度上? 它们中的文字 是 垂直居中对齐

是啥让 <button> 元素上的文本垂直居中?

是啥让 <button> 元素上的文本垂直居中?

Android中TextView的水平和垂直居中文本

Safari 中的垂直居中