2011-04-06 42 views
53

我想在TextView中插入一些图像。怎么做?任何想法如何在Android的TextView中显示图像?

+0

使用前两个答案,你是不是能够文本之间添加图片,只在顶部,底部,左侧或右侧,但我的解决方案可以让你在你想要的文字 – 2011-04-06 06:45:48

+2

看什么指数添加图片本文关于如何[将复合drawables设置为TextView](http://mgmblog.com/2010/06/04/setcompounddrawable-to-add-drawables-to-textview/) – Salil 2011-04-06 05:47:23

+0

'Dawid'已更新回答,颇有紧凑。 – Darpan 2015-09-01 05:01:42

回答

67

您可以创建一个spannableString,并将图像放置在TextView所需的位置。或者你可以使用

ImageSpan is = new ImageSpan(context, resId); 
text.setSpan(is, index, index + strLength, 0); 
+0

不会因索引越界异常而结束,因为第3个参数是int end,超出了字符串的长度? – 2014-07-30 08:15:20

+4

@LeiLeyba正确。真正的答案是:最终Spannable text = new SpannableString(string +“”); text.setSpan(is,string.length(),1 + string.length(),0); 。这会将图像添加到给定字符串的末尾。 – 2014-08-14 12:14:27

+0

如果你想放置一个包含文本的图像,请注意,如果你跨越一个“空格”字符并且textview在该位置插入换行符,那么它不会显示。我猜textview在这种情况下会剪切所有的空格,这会导致图像不能在该位置显示。使用不是由textview剪切的“x”虚拟字符。 – Kedu 2015-04-08 13:43:00

9

做这样的事情。

textView.setCompoundDrawableWithIntrinsicBounds(yourImg, null, null, null); 
23
ImageSpan is = new ImageSpan(context, R.drawable.arrow); 
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet"); 
text.setSpan(is, 5, 5 + 10, 0); 
+0

这是最干净的解决方案(和唯一一个适用于我) 。 – Bevor 2017-10-21 08:59:59

1

化妆custom.xml

 <RelativeLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <ImageView 
       android:id="@+id/thumbnail_view" 
       android:src="@drawable/ic_launcher" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

    <TextView android:id="@+id/message_view" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_toRightOf="@id/thumbnail_view" 
       android:textSize="18sp" 
       android:text="MyText" /> 
     </RelativeLayout> 

然后main.xml中,包括本custom.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_horizontal"> 

    <include 
     android:id="@+id/customView" 
     layout="@layout/custom"/> 

      </LinearLayout> 

这是我mainActivity.class

package com.example.test; 


import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
    import android.widget.TextView; 


    public class MainActivity extends Activity implements OnClickListener { 

    private String TAG = MainActivity.class.getSimpleName(); 
    ImageView img; 
    ImageView img1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TextView txt = (TextView)findViewById(R.id.message_view); 
    img = (ImageView) findViewById(R.id.thumbnail_view); 
    img1 = (ImageView) findViewById(R.id.thumbnail_view1); 

    img.setOnClickListener(this); 
    img1.setOnClickListener(this); 

} 
@Override 
public void onClick(View v) { 
    if(v== img){ 
     // do something for img 
    } 
    else if (v== img1){ 
     //do something for img1 
    } 

} 
} 
50

要容易得多可以使用SpannableStringBuilder从API 1

实例:

对于API> = 21

SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append("My string. I ") 
      .append(" ", new ImageSpan(getActivity(), R.drawable.ic_action_heart), 0) 
      .append(" Cree by Dexode"); 

    textView.setText(builder); 

对于API> = 1

SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append("My string. I ").append(" "); 
    builder.setSpan(new ImageSpan(getActivity(), R.drawable.ic_action_heart), 
      builder.length() - 1, builder.length(), 0); 
    builder.append(" Cree by Dexode"); 

    textView.setText(builder); 
+1

非常好的解决方案!谢谢 ! – 2016-01-28 13:34:47

+0

完美。谢谢! – Umair 2016-02-26 15:16:40

+0

嘿,是否有可能在textview中添加edittext,因为我们已经像上面那样在textview中添加了图像? – Anu 2017-03-08 06:09:23

-1

试试这个.. !!

<string name="home"><img src=""></img></string> 

<TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/home" /> 
+0

完全不起作用 – prateek31 2016-08-06 21:17:00

+0

它应该如何工作? – 2016-12-06 10:07:08

相关问题