![](https://img.haomeiwen.com/i5949429/4e6061dc8047ce22.png)
整体布局:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_96dp"
android:background="@color/color_FFFFFF">
<ImageView
android:id="@+id/search__imgView"
android:layout_width="@dimen/dimen_96dp"
android:layout_height="@dimen/demen_69dp"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/margin12"
android:scaleType="fitXY"
android:src="@mipmap/default_iv"
bind:layout_constraintBottom_toBottomOf="parent"
bind:layout_constraintLeft_toLeftOf="parent"
bind:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/search__view"
android:layout_width="0dp"
android:layout_height="0.5dp"
android:layout_marginLeft="@dimen/margin12"
android:layout_marginRight="@dimen/margin12"
android:background="#eeeeee"
android:visibility="visible"
bind:layout_constraintBottom_toBottomOf="parent"
bind:layout_constraintLeft_toLeftOf="parent"
bind:layout_constraintRight_toRightOf="parent" />
<android.support.constraint.ConstraintLayout
android:id="@+id/search__cl_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin12"
android:layout_marginTop="@dimen/margin28"
android:layout_marginRight="@dimen/margin12"
bind:layout_constraintLeft_toRightOf="@+id/search__imgView"
bind:layout_constraintRight_toRightOf="parent"
bind:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/search__tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/color333333"
android:textSize="@dimen/text13"
bind:layout_constrainedWidth="true"
bind:layout_constraintHorizontal_bias="0"
bind:layout_constraintHorizontal_chainStyle="packed"
bind:layout_constraintLeft_toLeftOf="parent"
bind:layout_constraintRight_toLeftOf="@+id/search__ll_label"
bind:layout_constraintTop_toTopOf="parent"
tools:text="标题标题题题题标题" />
<!-- android:includeFontPadding="false"-->
<LinearLayout
android:id="@+id/search__ll_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="visible"
bind:layout_constrainedWidth="true"
bind:layout_constraintLeft_toRightOf="@+id/search__tv_title"
bind:layout_constraintRight_toRightOf="parent"
android:paddingRight="@dimen/margin5"
bind:layout_constraintTop_toTopOf="@+id/search__tv_title"
>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
<TextView
android:id="@+id/search__tv_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="11dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/color666666"
android:textSize="@dimen/text11"
bind:layout_constraintLeft_toLeftOf="@+id/search__cl_title"
bind:layout_constraintTop_toBottomOf="@+id/search__cl_title"
tools:text="内容" />
</android.support.constraint.ConstraintLayout>
动态设置标签
private View setBookLabel(String content, String color) { //设置标签
View label_item = View.inflate (mContext, R.layout.item_search_inner_view, null);
TextView tv_inner_label = label_item.findViewById (R.id.tv_inner_label);
try {
tv_inner_label.setText (content);
GradientDrawable p = (GradientDrawable) tv_inner_label.getBackground ();
p.setColor (Color.parseColor (color));
} catch (Exception e) {
e.printStackTrace ();
MyLog.wtf (TAG, "颜色的值有问题");
}
return label_item;
}
标签的xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
>
<TextView
android:id="@+id/tv_inner_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin5"
android:background="@drawable/shape_textview"
android:gravity="center"
android:padding="2dp"
android:textColor="#fff"
android:layout_marginRight="@dimen/margin5"
android:textSize="@dimen/text10" />
</FrameLayout>
shape_textview标签的背景样式:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#fff" />
<!-- 圆角 -->
<corners android:radius="2dp" />
</shape>
/* 设置点击事件*/
holder.itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View v) {
if (listener != null) {
if (FastUtils.isFastClick ()) {//防止多次点击事件
listener.OnClickListener (v, position, SearchBean.BOOK, searchBean);
}
}
}
});
//展示图片
GlideImgManager.glideLoader (mContext, searchBean.getImgUrl (), R.mipmap.default_, R.mipmap.default_, ((ViewHolder) holder).getBinding ().searchImgView, 1);
List<PlsBean> plsBean = searchBean.getPls ();
if (plsBean != null && plsBean.size () != 0) {//获取标签集合,集合包含文字和颜色等信息
((ViewHolder) holder).getBinding ().searchLlLabel.setVisibility (View.VISIBLE);
((ViewHolder) holder).getBinding ().searchLlLabel.removeAllViews ();
for (int i = 0; i < plsBean.size (); i++) {
PlsBean plsBean1 = plsBean.get (i);
if (plsBean1 == null) {
continue;
}
if(TextUtils.isEmpty (plsBean1.getLabelName ())||TextUtils.isEmpty (plsBean1.getRgb ())){
continue;
}
View textHot = setLabel (plsBean1.getLabelName (), plsBean1.getRgb ());
((ViewHolder) holder).getBinding ().searchLlLabel.addView (textHot);
}
} else {
((ViewHolder) holder).getBinding ().searchLlLabel.setVisibility (View.GONE);
}
//内容
((ViewHolder) holder).getBinding ().searchTvContent.setText (searchBean.getContent ());
//计划书标题会 变颜色
if(searchBean.getContent ()==null||searchBean.getContent ().size ()==0){
//标题
((ViewHolder) holder).getBinding ().searchTvTitle.setText (searchBean.getTitle ());
}else{
//计划书 只有标题
List<String> content= searchBean.getContent ();
if(content.size ()>0){
//标题
((ViewHolder) holder).getBinding ().searchTvTitle.setText (WordUtil.fromHtml (searchBean.getContent ().get (0)));
}
}
工具类
public class WordUtil {
/**
* 通过Html.fromHtml方式修改颜色(解决SDK版本问题)
*
* @param html
* @return
*/
public static Spanned fromHtml(String html) {
Spanned result;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
result = Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
result = Html.fromHtml(html);
}
return result;
}
/**
* 字体颜色修改
* @param content
* @param color
* @return
*/
public static String color(String content,int color){
return "<font color=\"#" + Integer.toHexString(color) + "\" >" +content + "</font>";
}
/**
* 加粗字体
* @param content
* @return
*/
public static String bold(String content){
return "<b>"+content+"</b>";
}
/**
* 关键字高亮变色
* @param context 上下文
* @param color 变化的色值
* @param text 文字
* @param keyword 文字中的关键字
* @return 结果SpannableString
*/
public static SpannableString findSearch(Context context, int color, String text, String keyword) {
SpannableString s = new SpannableString(text);
keyword = escapeExprSpecialWord(keyword);
text = escapeExprSpecialWord(text);
if (text.contains(keyword) && !TextUtils.isEmpty(keyword)) {
try {
Pattern p = Pattern.compile(keyword);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
//注意:请使用ContextCompat.getColor获取颜色值。
s.setSpan(new ForegroundColorSpan (ContextCompat.getColor(context, color)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
} catch (Exception e) {
Log.e("错误:", e.toString());
}
}
return s;
}
/**
* 转义正则特殊字符 ($()*+.[]?\^{},|)
*
* @param keyword
* @return keyword
*/
public static String escapeExprSpecialWord(String keyword) {
if (!TextUtils.isEmpty(keyword)) {
String[] fbsArr = {"\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"};
for (String key : fbsArr) {
if (keyword.contains(key)) {
keyword = keyword.replace(key, "\\" + key);
}
}
}
return keyword;
}
/**
* 多个关键字高亮变色
*
* @param color 变化的色值
* @param text 文字
* @param keyword 文字中的关键字数组
* @return
*/
public static SpannableString findSearch(int color, String text, String...keyword) {
SpannableString s = new SpannableString(text);
for (int i = 0; i < keyword.length; i++) {
Pattern p = Pattern.compile(keyword[i]);
Matcher m = p.matcher(s);
while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return s;
}
}
public class FastUtils {
// 两次点击按钮之间的点击间隔不能少于1000毫秒
private static final int MIN_CLICK_DELAY_TIME = 1000;
private static long lastClickTime;
public static boolean isFastClick() {
boolean flag = false;
long curClickTime = System.currentTimeMillis();
if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
flag = true;
}
lastClickTime = curClickTime;
return flag;
}
}
补充
public class ViewHolder extends RecyclerView.ViewHolder {
public ItemSearchBinding binding;
public ViewHolder(ItemSearchBinding binding) {
super (binding.getRoot ());
this.binding = binding;
}
public ItemSearchBinding getBinding() {
return binding;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == SearchBean.BOOK) {
ItemSearchbookBinding binding = DataBindingUtil.inflate (LayoutInflater.from (parent.getContext ()), R.layout.item_search, parent, false);
return new ViewHolder (binding);}
网友评论