2014-06-12 34 views
0

在string.xml中,我有一个包含多个项目的字符串数组。在TextView之间显示图像

< string-array name="content"> 
< item> 
< ![CDATA[text line 1 
testing testing testing 
testing testing testing]]> 
< /item> 

我在TextView中显示该项目使用下面的代码片段中:

String content = getResources().getStringArray(R.array.content)[i]; 
text = (TextView)rootView.findViewById(R.id.textView1); 
text.setText(Html.fromHtml(content)); 

现在,我想在这个文本之间插入图片。例如“文本行1”之后的一个图像和“测试测试”之后的另一个图像。 我该如何实现此功能?

--Sushant

回答

1

您可以借助ImageGetter类实现相同的任务。 试试下面的代码: -

public class TestImageGetter extends Activity implements ImageGetter { 
    private final static String TAG = "TestImageGetter"; 
    private TextView mTv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test_image_getter); 
     String source = "this is a test of <b>ImageGetter</b> it contains " + 
       "two images: <br/>" + 
       "<img src=\"http://developer.android.com/assets/images/dac_logo.png\"><br/>and<br/>" + 
       "<img src=\"http://developer.android.com/assets/images/icon_search.png\">"; 

     Spanned spanned = Html.fromHtml(source, this, null); 
     mTv = (TextView) findViewById(R.id.text); 
     mTv.setText(spanned); 
    } 

    @Override 
    public Drawable getDrawable(String source) { 
     LevelListDrawable d = new LevelListDrawable(); 
     Drawable empty = getResources().getDrawable(R.drawable.ic_launcher); 
     d.addLevel(0, 0, empty); 
     d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight()); 

     new LoadImage().execute(source, d); 

     return d; 
    } 

    class LoadImage extends AsyncTask<Object, Void, Bitmap> { 

     private LevelListDrawable mDrawable; 

     @Override 
     protected Bitmap doInBackground(Object... params) { 
      String source = (String) params[0]; 
      mDrawable = (LevelListDrawable) params[1]; 
      Log.d(TAG, "doInBackground " + source); 
      try { 
       InputStream is = new URL(source).openStream(); 
       return BitmapFactory.decodeStream(is); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      Log.d(TAG, "onPostExecute drawable " + mDrawable); 
      Log.d(TAG, "onPostExecute bitmap " + bitmap); 
      if (bitmap != null) { 
       BitmapDrawable d = new BitmapDrawable(bitmap); 
       mDrawable.addLevel(1, 1, d); 
       mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
       mDrawable.setLevel(1); 
       // i don't know yet a better way to refresh TextView 
       // mTv.invalidate() doesn't work as expected 
       CharSequence t = mTv.getText(); 
       mTv.setText(t); 
      } 
     } 
    } 
} 

见下面的链接,我可以从以下链接帮助实现相同的任务: -

Html.ImageGetter TextView

+0

有什么办法来处理的strings.xml文件这一功能? – user1767570

相关问题