高亮关键词,仿淘宝

来源:互联网 发布:ksweb支持java 编辑:程序博客网 时间:2024/04/28 04:57

前段时间有人问类似淘宝的高亮关键词怎么做(如下图)
这里写图片描述

今天做了一个简单的demo 实验了一下,在这里记录分享一下。
首先布局文件如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >// 关键字    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10dp"        android:text="ni" >    </TextView>    <ListView        android:id="@+id/ls"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </ListView></LinearLayout>

MainActivity 如下

public class MainActivity extends Activity {    private ListView lView;    private TextView tv;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.demo);        lView = (ListView) findViewById(R.id.ls);        tv = (TextView) findViewById(R.id.tv);        // 数据源        ArrayList<String> strList = new ArrayList<String>(Arrays.asList(                "nicaiyicai", "woshi ni", "woburenshinia"));        adapter = new MyAdapter(this, strList, (String) tv.getText());        lView.setAdapter(adapter);    }}

都做好了,看一下MyAdapter 的代码,最主要的逻辑都在MyAdapter 里,如下:

public class MyAdapter extends BaseAdapter {    private Context mContext;  // 上下文    private ArrayList<String> strList;// 数据    private String flag; // 关键词,当然也可以改成数组 随你喜欢    public MyAdapter(Context mContext, ArrayList<String> strList, String flag) {        super();        this.mContext = mContext;        this.strList = strList;        this.flag = flag;    }    @Override    public int getCount() {        return strList != null ? strList.size() : 0;    }    @Override    public Object getItem(int position) {        return strList != null ? strList.get(position) : null;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int arg0, View arg1, ViewGroup arg2) {        TextView tv = new TextView(mContext);        String str = strList.get(arg0);// 这里是关键// 使用SpannableString 对象进行格式化// 至于你能通过 SpannableString  进行多少种效果,如下 /**  引自官方 http://developer.android.com/reference/android/text/style/CharacterStyle.htmljava.lang.Object  ↳ android.text.style.CharacterStyleKnown Direct Subclasses  (直接已知子类)    BackgroundColorSpan, ClickableSpan, ForegroundColorSpan, MaskFilterSpan, MetricAffectingSpan, RasterizerSpan, StrikethroughSpan, SuggestionSpan, UnderlineSpanKnown Indirect Subclasses (简介已知子类)    AbsoluteSizeSpan, DynamicDrawableSpan, ImageSpan, LocaleSpan, RelativeSizeSpan, ReplacementSpan, ScaleXSpan, StyleSpan, SubscriptSpan, SuperscriptSpan, TextAppearanceSpan, TypefaceSpan, URLSpan*/Class Overview        SpannableString span = new SpannableString(str);        span.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)),                str.indexOf(flag), str.indexOf(flag) + flag.length(),                Spanned.SPAN_EXCLUSIVE_INCLUSIVE);        tv.setPadding(50, 50, 50, 50);        tv.setText(span);        return tv;    }}
0 0
原创粉丝点击