如何在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">
...并在里面附上ImageView
和TextView
。
旧答案
这是一个想法:将您的按钮包装在 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和文本?的主要内容,如果未能解决你的问题,请参考以下文章