添加可绘制的多行文本视图开始

时间:2019-05-04 16:02:41

标签: android kotlin textview android-drawable

需要在多行文本中添加报价作为可绘制内容,如下面提到的屏幕所示。就像您看到的引号是多行文本的开头,而下一行文本只是从下面的引号开始。

Quote(drawable) should be starting of text in Textview and enter image description here

我需要使用TextView来实现这一点,引用应该是可绘制的。

如果我正在使用TextView的drawableLeft属性,其显示如下图所示。

enter image description here

     <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!\nHello World!\nHello World!\nHello World!"
        android:drawableStart="@drawable/ic_quote"
        android:drawableLeft="@drawable/ic_quote"/>

3 个答案:

答案 0 :(得分:1)

您可以创建一个SpannableString来添加可绘制对象:

TextView myTextView = (TextView) findViewById(R.id.myTextView);

ImageSpan imageSpan = new ImageSpan(this, R.drawable.ic_quote);
SpannableString spannableString = new SpannableString("*" + myTextView.getText()); // "*" will be replaced by your drawable

int start = 0; // the start index, inclusive
int end = 1; // the end index, exclusive
int flag = 0;
spannableString.setSpan(imageSpan, start, end, flag);

myTextView.setText(spannableString);

在您的布局中:

<TextView
   android:id="@+id/myTextView"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello World!\nHello World!\nHello World!\nHello World!"/>

答案 1 :(得分:0)

尝试使用android:gravity="top"

如果它不起作用,则以这样的负边距进行

android:drawablePadding="-20sp"

另一种替代方法是在ImageView内的TextView旁边放置一个LinearLayout,以便您可以施加重力

答案 2 :(得分:0)

您可以使用SpannableStringBuilder。

 val spannableText = SpannableStringBuilder("*Your text!").apply {
            val imageSpan = ImageSpan(context, R.drawable.your_icon)
            setSpan(imageSpan, 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
 }
 textView.setText(spannableText, TextView.BufferType.SPANNABLE)

符号*将被放置在您的图标上。