Android在列表视图中显示HTML

Android在列表视图中显示HTML,android,android-layout,Android,Android Layout,很抱歉,如果这对其他人来说是显而易见的,但是我在理解如何在我的listview中显示html时遇到了一点小困难 我的列表视图已声明 ListView lv1 = (ListView) findViewById(R.id.ListView01); 我填充它(未显示),然后在此处使用ArrayAdapter设置我的listview lv1.setAdapter(new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_v

很抱歉,如果这对其他人来说是显而易见的,但是我在理解如何在我的listview中显示html时遇到了一点小困难

我的列表视图已声明

ListView lv1 = (ListView) findViewById(R.id.ListView01);
我填充它(未显示),然后在此处使用ArrayAdapter设置我的listview

lv1.setAdapter(new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, foods));
lv1.setAdapter(新的ArrayAdapter(SearchByFood.this,R.layout.new_list_view,foods));
再往下,我创建了一个新的字符串数组,我想在其中添加粗体标记。然后,我将这个新数组(称为arr_sort)添加到onTextChanged()方法中的arrayadapter中

lv1.setAdapter(新的ArrayAdapter(SearchByFood.this,R.layout.new_list_view,arr_sort));
现在,我的新字符串数组中有标记。如何使listview显示粗体文本

这是我的新列表视图

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/grey2"
    android:textSize="20sp"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:minHeight="40dip"
/> 

这是我的主布局中的ListView部分

        <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/rounded_corners_green"
        android:cacheColorHint="#00000000"
        android:divider="@color/green6"
        android:dividerHeight="1px"
        android:fastScrollEnabled="true" >
    </ListView>


任何帮助都将不胜感激

如果可以从strings.xml加载文本,则在其中添加标记将自动加粗文本。
但是,如果文本是动态的,则必须创建一个,并在其中使用
textView.setText(Html.fromHtml(yourText))设置文本

覆盖适配器的getItem方法并执行以下操作:

ArrayAdapter<String> adapter= ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort){
     public Object getItem(int position)
     {
          return Html.fromHtml(arr_sort.get(position));
     }
};
textview.setText(Html.fromHtml(text));
ArrayAdapter adapter=ArrayAdapter(SearchByFood.this,R.layout.new\u list\u视图,arr\u排序){
公共对象getItem(int位置)
{
返回Html.fromHtml(arr_sort.get(position));
}
};

如果您只想显示某些文本,其中部分文本应为粗体,则只需一个文本视图,并正确设置文本格式(添加),然后执行以下操作:

ArrayAdapter<String> adapter= ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort){
     public Object getItem(int position)
     {
          return Html.fromHtml(arr_sort.get(position));
     }
};
textview.setText(Html.fromHtml(text));

有关TextView+Html可以支持什么的更多信息,请参见

Ok,因此Jitendra Sharma对我的场景有正确的想法,但我需要覆盖getView方法。至少这对我来说是有效的。然后在getView方法中,我可以设置文本以html呈现

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort)
            {
                @Override
                public View getView(int position, View convertView, ViewGroup parent) 
                {
                    View row;

                    if (null == convertView) {
                    row = mInflater.inflate(R.layout.new_list_view, null);
                    } else {
                    row = convertView;
                    }

                    TextView tv = (TextView) row.findViewById(android.R.id.text1);
                    tv.setText(Html.fromHtml(getItem(position)));
                    //tv.setText(getItem(position));

                    return row;
                }

            };
            lv1.setAdapter(adapter);
ArrayAdapter adapter=new ArrayAdapter(SearchByFood.this,R.layout.new\u list\u view,arr\u sort)
{
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
查看行;
if(null==convertView){
row=mInflater.充气(R.layout.new\u list\u视图,空);
}否则{
行=转换视图;
}
TextView tv=(TextView)row.findViewById(android.R.id.text1);
tv.setText(Html.fromHtml(getItem(position));
//tv.setText(getItem(position));
返回行;
}
};
lv1.设置适配器(适配器);
ArrayAdapter listAdapter=新的ArrayAdapter(MyActivity.this,R.layout.row);
add(Html.fromHtml(htmlText));
add(Html.fromHtml(htmlText));
...

这同样有效,而且简单得多。首先,将数据从字符串[]传递到跨距[]

Spanned[] myhtmldata = new Spanned[mydata.length];
for(int i = 0 ; i < mydata.length; i++) {
myhtmldata[i] = Html.fromHtml(mydata[i]);
}
span[]myhtmldata=新的span[mydata.length];
对于(int i=0;i
然后使用CharSequence参数声明ArrayAdapter

ArrayAdapter<CharSequence> linksadapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.list_item, R.id.textview, myhtmldata);         
setListAdapter(linksadapter);
ArrayAdapter linksadapter=new ArrayAdapter(getActivity(),R.layout.list_项,R.id.textview,myhtmldata);
setListAdapter(链接适配器);

借用自

如果您使用的是SimpleAdapter,下面是在TextView上启用HTML的代码

adapter.setViewBinder(new SimpleAdapter.ViewBinder() {  
    public boolean setViewValue(View view, Object data, String textRepresentation) {  
        if (data instanceof Spanned && view instanceof TextView) {  
            ((TextView) view).setText((Spanned) data);  
        } else {  
            ((TextView) view).setText(Html.fromHtml(String.valueOf(data))); 
        }  
        return true;  
        }  
    }  
); 

Ref:[Link]()

如果您对来自任何数据库引擎的html数据使用ksoap

yourVariable=String.valueOf(Html.fromHtml(ic.getProperty(0).toString()))
adapter=newarrayadapter(rr.getContext(),android.R.layout.simple\u list\u item\u 1,titulos)
{
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
查看行;
if(null==convertView){
row=GetLayoutFlater().充气(android.R.layout.simple\u list\u item\u 1,null);
}否则{
行=转换视图;
}
TextView tv=(TextView)row.findViewById(android.R.id.text1);
tv.setText(Html.fromHtml(getItem(position));
返回行;
}
};
setAdapter(适配器);

这是公认的答案,这一事实令人困惑。OP的答案,S.A.Jay为我工作。这似乎是正确的做法,但android找不到“mInflater”,我应该怎么做?LayoutFlater mInflater=(LayoutFlater)活动。这个.getSystemService(Context.LAYOUT\u INFLATER\u服务);这是我添加的,以使这项工作。将“活动”更改为您的活动名称。
    adapter = new ArrayAdapter<String>(rr.getContext(),android.R.layout.simple_list_item_1,titulos)
    {
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            View row;

            if (null == convertView) {
                row = getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null);
            } else {
                row = convertView;
            }
            TextView tv = (TextView) row.findViewById(android.R.id.text1);
            tv.setText(Html.fromHtml(getItem(position)));
            return row;
        }
    };
    lista.setAdapter(adapter);