android 实现TextView多样式

android 实现TextView多样式,第1张

概述最近在修改之前的代码发现了有个页面布局如下 这样的话就会导致字体增多就很难看原始xml布局如下只截取有关部分<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop

最近在修改之前的代码发现了有个页面布局如下

 这样的话就会导致字体增多就很难看

原始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多样式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存