2011-04-06 62 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

相關問題