无论drawableLeft如何将文本置于Button中心?

时间:2015-04-09 20:18:36

标签: android button textview drawable

我希望文字以Button为中心。但每当我向android:drawableLeft添加Button xml属性时,它都会偏移文本。我该如何解决这个问题?

share button

我设法修复它的唯一方法是在android:drawablePadding中设置一个负数:

enter image description here

但我正在寻找一种更清洁的解决方案来实现它。

5 个答案:

答案 0 :(得分:1)

所以我最终选择了较小的邪恶,并将可绘制和文本放在RelativeLayout内:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Button.ButtonGray"
    android:id="@+id/share_button">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/btn_share"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black"
        android:textStyle="bold"
        android:layout_centerInParent="true"
        style="@style/TextNormalWeight"
        android:text="@string/post_share"/>

</RelativeLayout>

RelativeLayout然后接收点击事件并采取行动,看起来像一个按钮。

答案 1 :(得分:0)

不幸的是,这是Button行为,我同意你的看法,负面填充是一种肮脏的黑客,所以我建议另外两个黑客对我来说听起来有点不那么脏,因为他们依赖预期的行为(负填充虽然有效,但不是设计):

  • 将按钮上的android:paddingRight设置为drawables的大小
  • 使用与左侧drawable相同的尺寸创建一个drawable,但所有透明像素都是正确的,并且可以放置为右侧。

答案 2 :(得分:0)

机器人:重力= “center_vertical”

答案 3 :(得分:0)

不幸的是,没有干净的方法可以做到这一点。一种相当直接的方法是在按钮的另一侧设置一个相等大小的透明ColorDrawable。

val drawableSize = button.height // adjust this as desired of course

realDrawable.setBounds(0, 0, drawableSize, drawableSize)

val emptyDrawable = ColorDrawable(Color.TRANSPARENT).apply {
    setBounds(0, 0, drawableSize, drawableSize)
}

button.setCompoundDrawables(realDrawable, null, emptyDrawable, null)

答案 4 :(得分:-1)

适用于:

android:gravity="center"