最近在修改之前的代码发现了有个页面布局如下
这样的话就会导致字体增多就很难看
原始xml布局如下 只截取有关部分
<linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="@dimen/ten" androID:gravity="center_vertical" androID:orIEntation="horizontal"> <TextVIEw androID:ID="@+ID/upload_from" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginleft="4sp" androID:text="" androID:textcolor="@color/blue" androID:textSize="12sp" androID:textStyle="bold" /> <TextVIEw androID:ID="@+ID/reply" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginleft="4dp" androID:text="" androID:textcolor="@color/defcolor2" androID:textSize="12sp" androID:visibility="gone" /> <TextVIEw androID:ID="@+ID/upload_to" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginleft="4sp" androID:text="" androID:textcolor="@color/blue" androID:textSize="12sp" androID:textStyle="bold" androID:visibility="gone" /> <TextVIEw androID:ID="@+ID/upload_board" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_marginleft="5dp" androID:layout_marginRight="10dp" androID:gravity="center|left" androID:text="" androID:textcolor="@color/defcolor0" androID:textSize="12sp" /> </linearLayout>
相关逻辑判断
private voID getbusinessList() { adapter = new LCommonAdapter<GetUploadingMessageBean.DataBean>(mContext, R.layout.item_message_board_info) { @OverrIDe protected voID convert(LVIEwHolder vIEwHolder, GetUploadingMessageBean.DataBean item, int position) { vIEwHolder.setText(R.ID.upload_board, item.getContent()); vIEwHolder.setText(R.ID.upload_from, item.getUsername() + ":"); vIEwHolder.setVisible(R.ID.reply, false); vIEwHolder.setVisible(R.ID.upload_to, false); if (!TextUtils.isEmpty(item.getReplyname())) { vIEwHolder.setVisible(R.ID.reply, true); vIEwHolder.setText(R.ID.reply, "回复"); vIEwHolder.setText(R.ID.upload_to, item.getReplyname()+":"); vIEwHolder.setVisible(R.ID.upload_to, true); } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); Date d1 = new Date(item.getCreateTime()); String t1 = format.format(d1); vIEwHolder.setText(R.ID.upload_time, t1); vIEwHolder.setonClickListener(R.ID.reply_msg, new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { uploadto = item.getUsername(); et_message.setHint("回复:" + uploadto); et_message.setFocusable(true); et_message.setFocusableIntouchMode(true); et_message.requestFocus(); //d出软键盘 inputMethodManager inputManager = (inputMethodManager) et_message.getContext() .getSystemService(Context.input_METHOD_SERVICE); inputManager.showSoftinput(et_message, 0); } }); } }; adapter.clear(); adapter.notifyDataSetChanged(); live_message.setAdapter(adapter); live_message.setFocusable(false); }
代码很繁琐而且布局也不对
解决方案:
Xml文件修改为
<linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="@dimen/ten" androID:gravity="center_vertical" androID:orIEntation="horizontal"> <TextVIEw androID:ID="@+ID/content" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_marginleft="5dp" androID:layout_marginRight="10dp" androID:gravity="center|left" androID:text="" androID:textcolor="@color/defcolor0" androID:textSize="12sp" /> </linearLayout>
这里只使用一个TextVIEw
逻辑判断
private voID getbusinessList() { adapter = new LCommonAdapter<GetUploadingMessageBean.DataBean>(mContext, R.layout.item_message_board_info_test) { @OverrIDe protected voID convert(LVIEwHolder vIEwHolder, GetUploadingMessageBean.DataBean item, int position) { String content=item.getContent(); String from=item.getUsername(); String to=item.getReplyname(); String replymsg=from+" 回复 :"+to+" "+content; int countfrom=from.length(); int countto=from.length(); String noreply=from+" : "+content; if (!TextUtils.isEmpty(to)){ SpannableString spannableString=new SpannableString(replymsg);// ForegroundcolorSpan span=new ForegroundcolorSpan(mContext.getResources().getcolor(R.color.blue));
// spannableString.setSpan(span,0, countfrom, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
// spannableString.setSpan(span,countfrom+5,countfrom+5+countto,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
spannableString.setSpan(CharacterStyle.wrap(new ForegroundcolorSpan(mContext.getResources().getcolor(R.color.blue))),0, countfrom, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); spannableString.setSpan(CharacterStyle.wrap(new ForegroundcolorSpan(mContext.getResources().getcolor(R.color.blue))),countfrom+5,countfrom+5+countto,Spannable.SPAN_EXCLUSIVE_INCLUSIVE); vIEwHolder.setText(R.ID.content,spannableString); }else { SpannableString spannableString=new SpannableString(noreply); ForegroundcolorSpan span=new ForegroundcolorSpan(mContext.getResources().getcolor(R.color.blue)); spannableString.setSpan(span,0, countfrom, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); vIEwHolder.setText(R.ID.content,spannableString); } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); Date d1 = new Date(item.getCreateTime()); String t1 = format.format(d1); vIEwHolder.setText(R.ID.upload_time, t1); vIEwHolder.setonClickListener(R.ID.reply_msg, new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { uploadto = item.getUsername(); et_message.setHint("回复:" + uploadto); et_message.setFocusable(true); et_message.setFocusableIntouchMode(true); et_message.requestFocus(); //d出软键盘 inputMethodManager inputManager = (inputMethodManager) et_message.getContext() .getSystemService(Context.input_METHOD_SERVICE); inputManager.showSoftinput(et_message, 0); } }); } }; adapter.clear(); adapter.notifyDataSetChanged(); live_message.setAdapter(adapter); live_message.setFocusable(false);}
使用SpannableStringBuilder 即可 *** 作同一个TextVIEw中的值实现不同样式和颜色,这里使用方法就不举例了
需要注意的是也是踩坑的是
在同一个spannablestring中同时使用两次
.span方法时会有一个方法不起效,即使你确定了两次方法的起始和终止位置不同但也没用
如上文
spannableString.setSpan(CharacterStyle.wrap(new ForegroundcolorSpan(mContext.getResources().getcolor(R.color.blue))),0, countfrom, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
我使用了
CharacterStyle.wrap()的方法进行带入
详细解释这里有
https://blog.csdn.net/gxp1182893781/article/details/76916796
最终实现效果如下所示:可以看到就很好了不会出现布局错乱的问题了
总结
以上是内存溢出为你收集整理的android 实现TextView多样式全部内容,希望文章能够帮你解决android 实现TextView多样式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)