搜索关键字变颜色

相信大家平时都看到很多app上都有这个功能,所搜的关键字会变成红色或者别的颜色,但是android的TextView却没有这个属性。现在小编就简单介绍下。

一、首先,我们知道android自带的TextView 没有这个功能,那么我们可以自定义TextView来实现这个功能。

自定义TextView代码如下:

package com.bawei.col.view;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

public MyTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public void setSpecifiedTextsColor(String text, String specifiedTexts, int color) {
    List<Integer> sTextsStartList = new ArrayList<Integer>();

    int sTextLength = specifiedTexts.length();
    String temp = text;
    int lengthFront = 0;//记录被找出后前面的字段的长度
    int start = -1;
    do {
        start = temp.indexOf(specifiedTexts);

        if (start != -1) {
            start = start + lengthFront;
            sTextsStartList.add(start);
            lengthFront = start + sTextLength;
            temp = text.substring(lengthFront);
        }

    } while (start != -1);

    SpannableStringBuilder styledText = new SpannableStringBuilder(text);
    for (Integer i : sTextsStartList) {
        styledText.setSpan(
                new ForegroundColorSpan(color),
                i,
                i + sTextLength,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    setText(styledText);
}
}

现在我们有了自定义的这个TextView控件,我们只需要在布局中使用它就行了

布局Xml代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <EditText 
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入关键字"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="搜索" />

    <com.bawei.col.view.MyTextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
三、现在布局也完成了,可以进行搜索关键字查找了

代码如下:(这里我是模拟的死数据,相信同学看完就知道怎么使用了)

package com.bawei.col;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

import com.bawei.col.view.MyTextView;

public class MainActivity extends Activity {

    private EditText search;
	private MyTextView text;
	public String result = "明朝年间,有一个叫谷才的人,他收了很多个弟子,形成了一个集团,都男扮女装,以教授妇女手工活,晚上在把女子那个,当然,这代表谷才的化妆技术真的非常好,让人家真的以为是女子,而谷才有一个弟子,叫桑冲,一次,他又去行骗,以怕被老公打来借宿之名,住在晋州聂村生员高宣家,刚好高宣有个女婿,叫赵文举,看上了这个男扮女装的桑冲,而桑冲呢,是看中高家小姐,晚上正在打高家小姐的主意时,竟反被赵文举给压住,想对他那个,结果事情才这么东窗事发,桑冲当场被送去官府,据桑冲的口供,他已经犯案成功了182次了!!";

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //找控件
        Button button = (Button) findViewById(R.id.button);//搜索按钮
        search = (EditText) findViewById(R.id.search);//输入框
        text = (MyTextView) findViewById(R.id.text);//文本
        
        //设置按钮监听
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//获取文本框的内容
				String trim = search.getText().toString().trim();
				//设置关键字颜色
				/**
				 * result 搜索到的内容
				 * trim 需要改变颜色的关键字
				 */
				text.setSpecifiedTextsColor(result, trim, Color.parseColor("#FF0000"));
			}
		});
    }
}

  1. 完成上述代码就可以实现搜索关键字变色的效果哦。

效果图如下:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值