如何在宽度设置为“填充父项”的android按钮中居中放置图标和文本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我想要一个带有图标+文本的Android按钮。我使用drawableLeft属性来设置图像,如果按钮的宽度是宽度"wrap_content"但是我需要拉伸到最大宽度,所以我使用宽度"fill_parent"。这会将我的图标直接移动到按钮的左侧,并且我希望图标和文本都位于按钮的中央。

我试着设置填充,但这只允许给出一个固定的值,所以它不是我所需要的。我需要在中心对齐图标+文字:

<Button 
    android:id="@+id/startTelemoteButton" 
    android:text="@string/start_telemote"
    android:drawableLeft="@drawable/start"
    android:paddingLeft="20dip"
    android:paddingRight="20dip"            
    android:width="fill_parent"
    android:heigh="wrap_content" />
提问于
用户回答回答于

我知道我迟到回答这个问题,但这帮助了我:

<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="10dp"
            android:background="@color/fb" >

            <Button
                android:id="@+id/fbLogin"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:background="@null"
                android:drawableLeft="@drawable/ic_facebook"
                android:gravity="center"
                android:minHeight="0dp"
                android:minWidth="0dp"
                android:text="FACEBOOK"
                android:textColor="@android:color/white" />
        </FrameLayout>

用户回答回答于

你可以使用android:drawableStart属性在文本的开头放置drawable。我唯一向下兼容的解决方案是使用ImageSpan创建一个Text + Image Spannable:

Button button = (Button) findViewById(R.id.button);
Spannable buttonLabel = new SpannableString(" Button Text");
buttonLabel.setSpan(new ImageSpan(getApplicationContext(), R.drawable.icon,      
    ImageSpan.ALIGN_BOTTOM), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
button.setText(buttonLabel);

在我的情况下,我还需要调整Button的android:gravity属性,使其看起来居中:

<Button
  android:id="@+id/button"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:minHeight="32dp"
  android:minWidth="150dp"
  android:gravity="center_horizontal|top" />

扫码关注云+社区