StaticTextView ---TextView优化

StaticTextView —TextView优化

最近项目在做RecycerView的相关优化工作,发现系统提供的TextView效率不够高,setText方法每次总会消耗大概3-5ms左右,TextView作为很多view的基类,处理了很多事情比如文字变化的监听等,大大影响了bindViewHolder的时间,所以自定义了一个功能简化的TextView。

由于不需要其它特殊的功能支持,比如富文本等等,只需要提供简单的文字展示,所以使用StaticLayout去实现文字的layout控制,TextView内部有DynamicLayout、BoringLayout、StaticLayout三种,分别支持动态文本,单行文本,多行文本。

因为需要适配低版本android,StaticLayout在低版本安卓不支持builder创建,没有maxlines,ellipse相关属性,所以通过代码去实现maxline效果,对text做截取

public class StaticTextView extends View {
   

    //行文本记录集
    private List<LineText> lineTexts = new ArrayList<>();
    //最大显示文本行数
    private int mMaxLines = 2;
    //最大显示文本行对应的本视图高度
    private int maxLinesHeight;
    //当前文本
    private String mText;

    private boolean needMeasure = true;

    private TextPaint mTextPaint;

    public StaticTextView(Context context) {
   
        this(context, null);
    }

    public StaticTextView(Context context, AttributeSet attrs) {
   
        this(context, attrs, 0);
    }

    public StaticTextView(Context context, AttributeSet attrs, int defStyleAttr) {
   
        super(context, attrs, defStyleAttr);
        initFontSize();
    }

    private void initFontSize() {
   
        if (isInEditMode()) {
   
            return;
        }
        mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
        mTextPaint.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
        mTextPaint.density = getContext().getResources().getDisplayMetrics().density;
        mTextPaint.setColor(Color.BLACK);
        mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mTextPaint.setTextSize(UIUtils.sp2px(getContext(), 18f));
    }



    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码的逻辑看起来已经比较清晰了,不过可以进行一些优化和修改: 1. 避免重复的findViewById操作 在onCreate方法中,tvPhone和tvPhon1都进行了findViewById操作,这里可以避免重复代码。可以将其中一个findViewById操作删除,只保留一个即可。 2. 使用常量或字符串资源 在代码中直接使用字符串 "0574-86891367" 和 "https://www.nbpt.edu.cn",不便于管理和维护。可以将这些字符串定义为常量或字符串资源,例如: ``` private static final String PHONE_NUMBER = "0574-86891367"; private static final String WEBSITE_URL = "https://www.nbpt.edu.cn"; ``` 或者在strings.xml文件中添加如下定义: ``` <string name="phone_number">0574-86891367</string> <string name="website_url">https://www.nbpt.edu.cn</string> ``` 然后在代码中使用getString方法获取字符串资源: ``` String phoneNumber = getString(R.string.phone_number); String websiteUrl = getString(R.string.website_url); ``` 3. 对TextView添加点击事件 在代码中对TextView添加了点击事件,可以使用android:clickable="true"属性来简化代码,例如: ``` <TextView android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0574-86891367" android:textColor="@color/colorAccent" android:textStyle="bold" android:textSize="18sp" android:clickable="true" android:onClick="onTextViewClick" /> ``` 然后在Activity中添加一个onTextViewClick方法: ``` public void onTextViewClick(View view) { int id = view.getId(); switch (id) { case R.id.textView6: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel://" + getString(R.string.phone_number)); intent.setData(data); startActivity(intent); break; case R.id.textView12: Uri data1 = Uri.parse(getString(R.string.website_url)); Intent intent1 = new Intent(Intent.ACTION_VIEW, data1); startActivity(intent1); break; } } ``` 这样就可以避免在Activity中重复编写onClick方法了。 4. 添加注释 在代码中添加注释可以方便自己和其他人理解代码的逻辑和作用,建议添加一些必要的注释。例如: ``` // 设置标题栏名称 setTitle("联系我们"); // 对TextView添加下划线效果 tvPhone.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); tvPhon1.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); // 对TextView添加点击事件 tvPhone.setOnClickListener(this); tvPhon1.setOnClickListener(this); // 处理TextView的点击事件 public void onTextViewClick(View view) { // ... } ``` 以上是一些可能的优化和修改建议,需要根据实际情况进行具体操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值