Android 在Spanable setSpan中的图像和字符串之间创建空格

Android 在Spanable setSpan中的图像和字符串之间创建空格,android,spannablestring,spannable,Android,Spannablestring,Spannable,我需要在按钮的中心放置一个图像和字符串。需要在它们之间创建空间。 a你好%1$d 我的代码: String textValue = getResources().getString(R.string.hello_text); final Spannable buttonLabel = new SpannableString(String.format(textValue, 2)); //buttonLabel.setSpan(new ImageSp

我需要在按钮的中心放置一个图像和字符串。需要在它们之间创建空间。 a你好%1$d

我的代码:

String textValue = getResources().getString(R.string.hello_text);
            final Spannable buttonLabel = new SpannableString(String.format(textValue, 2));
            //buttonLabel.setSpan(new ImageSpan(getApplicationContext(), R.drawable.hello_imagel,
                   // ImageSpan.ALIGN_BOTTOM), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mButton.setText(buttonLabel);
我需要在图像和文本之间留出空间。我尝试在strings.xml中提供空格,但它不显示空格。添加下面的xml后,图像位于左侧,字符串位于中间。我希望图像和字符串位于中间,图像和字符串之间只有很少的空格

xml:


如果不需要在字符串中显示图标,可以将drawable添加到按钮中。 i、 e.文本左侧的图标:

<Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:drawableLeft="@drawable/icon"
     android:drawablePadding="20dp">
其中@drawable/icon是您的图标,20dp是图标和文本之间的填充


舒尔您也可以从代码中执行同样的操作-查看setCompoundDrawables和setCompoundDrawablePadding

抱歉迟到,我希望此方法对您有所帮助,kotlin上有:

fun setLeftIcon(roundButton: RoundButton, iconId: Int) = with(roundButton) {
  if (iconId == DEFAULT_IMAGE_ID) return
  val currentText = text.toString()
  // The spaces are a workaround to add some space between the image and the text
  val buttonLabel = SpannableString("   $currentText")
  buttonLabel.setSpan(
    ImageSpan(context, iconId),
    0,
    1,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
  )
  text = buttonLabel
}

我的问题有什么答案吗?似乎您正在尝试在可扩展字符串中添加零位置的图像,因此您可以删除代码并以与我上面所写相同的方式在xml文件中添加此图像。我尝试了您的想法,但填充无效。按钮重力设置为中心。我已经在问题中添加了我的xml。是的,我尝试了20dp和50dp。它总是在左边的角落啊。。。你已经修改了这个问题。我以为你希望图像在左边。我发布的代码没有帮助。尝试此扩展ImageSpan类并重写以下几种方法:
fun setLeftIcon(roundButton: RoundButton, iconId: Int) = with(roundButton) {
  if (iconId == DEFAULT_IMAGE_ID) return
  val currentText = text.toString()
  // The spaces are a workaround to add some space between the image and the text
  val buttonLabel = SpannableString("   $currentText")
  buttonLabel.setSpan(
    ImageSpan(context, iconId),
    0,
    1,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
  )
  text = buttonLabel
}