美文网首页
新 TextView 换行,左边是其它控件

新 TextView 换行,左边是其它控件

作者: 一个冬季 | 来源:发表于2021-04-27 16:11 被阅读0次

TextView 换行,左边是其它控件 这个是之前的,没有进行封装,这次我想将其进行一个封装

github地址

效果图.png

可以定义的参数

设置左边view的drawable
app:tv_leo_left_background  

设置左边view的宽高
app:tv_leo_left_width
app:tv_leo_left_height

设置左边view的上下左右padding
app:tv_leo_left_paddingleft  
app:tv_leo_left_paddingright
app:tv_leo_left_paddingtop
app:tv_leo_left_paddingbottom

设置左边view的距离顶部的距离
app:tv_leo_left_margintop

设置左边view的文本颜色
app:tv_leo_left_textcolor

设置左边view的文本大小
app:tv_leo_left_textsize

设置右边view的最多行数
app:tv_leo_right_maxlines

设置右边view的文字颜色
app:tv_leo_right_textcolor

设置右边view的文本大小
app:tv_leo_right_textsize

  <com.gxx.textlayoutapplication.weiget.TextViewLeftOtherLayout
        android:id="@+id/tv_other_textview_left_other_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tv_leo_left_background="@drawable/shape_rectangle_solid_red_d0372a_corner50"
        app:tv_leo_left_paddingleft="8dp"
        app:tv_leo_left_paddingright="8dp"
        app:tv_leo_left_paddingtop="0dp"
        app:tv_leo_left_paddingbottom="0dp"
        app:tv_leo_left_textcolor="@color/green_48D2C5"
        app:tv_leo_left_textsize="14"
        app:tv_leo_right_maxlines="2"
        app:tv_leo_right_textcolor="@color/purple_200"
        app:tv_leo_right_textsize="18" />

  使用方式
  val textViewLeftOtherLayout = findViewById<TextViewLeftOtherLayout>(R.id.tv_other_textview_left_other_layout);
  textViewLeftOtherLayout.setLeftRightTextValue("来来来","在自定义View中通过Canvas绘制文字时,经常需要测量文字的宽度和高度的宽度和高度的宽度和高度");
/**
 * @date 创建时间:2021/4/27 0027
 * @auther gaoxiaoxiong
 * @Descriptiion TextView左边是其它的
 **/
public class TextViewLeftOtherLayout extends FrameLayout {
    private Context mContext;
    private int leftTextViewWidth = 0;
    private int leftTextViewHeight = 0;
    private int leftTextViewPaddingLeft, leftTextViewPaddingRight, leftTextViewPaddingTop, leftTextViewPaddingBottom = 0;
    private int leftTextViewColor = 0;
    private int leftTextViewTextSize = 12;
    private Drawable leftTextViewBackground = null;
    private int leftTextViewMarinTop = 0;
    private String leftTextViewTextValue = "";

    private int rightTextViewColor = 0;
    private int righhtTextViewTextSize = 16;
    private int rightTextViewMaxLines = 2;
    private String rightTextViewTexTValue = "";

    private int leftRightDistance = 0;
    TextView leftTextView = null;
    TextView rightTextView = null;

    public TextViewLeftOtherLayout(@NonNull Context context) {
        this(context, null);
    }

    public TextViewLeftOtherLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TextViewLeftOtherLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        leftTextView = new TextView(mContext);
        rightTextView = new TextView(mContext);
        TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.TextViewLeftOtherLayout, 0, 0);
        try {
            leftTextViewWidth = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_width, DensityUtil.getInstance().dip2px(0));
            leftTextViewHeight = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_height, DensityUtil.getInstance().dip2px(20));
            leftTextViewPaddingLeft = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_paddingleft, DensityUtil.getInstance().dip2px(5));
            leftTextViewPaddingTop = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_paddingtop, DensityUtil.getInstance().dip2px(0));
            leftTextViewPaddingRight = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_paddingright, DensityUtil.getInstance().dip2px(5));
            leftTextViewPaddingBottom = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_paddingbottom, DensityUtil.getInstance().dip2px(0));
            leftTextViewColor = typedArray.getColor(R.styleable.TextViewLeftOtherLayout_tv_leo_left_textcolor, ContextCompat.getColor(mContext, R.color.white));
            leftTextViewTextSize = typedArray.getInt(R.styleable.TextViewLeftOtherLayout_tv_leo_left_textsize, 12);
            leftTextViewBackground = typedArray.getDrawable(R.styleable.TextViewLeftOtherLayout_tv_leo_left_background);
            leftTextViewMarinTop = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_margintop, DensityUtil.getInstance().dip2px(3));

            rightTextViewColor = typedArray.getColor(R.styleable.TextViewLeftOtherLayout_tv_leo_right_textcolor, ContextCompat.getColor(mContext, R.color.black_222222));
            righhtTextViewTextSize = typedArray.getInteger(R.styleable.TextViewLeftOtherLayout_tv_leo_right_textsize, 14);
            rightTextViewMaxLines = typedArray.getInteger(R.styleable.TextViewLeftOtherLayout_tv_leo_right_maxlines, 2);

            leftRightDistance = typedArray.getDimensionPixelOffset(R.styleable.TextViewLeftOtherLayout_tv_leo_left_right_distance, DensityUtil.getInstance().dip2px(5));
        } finally {
            typedArray.recycle();
        }

        init();
    }

    private void init() {
        LayoutParams leftTextViewParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        if (leftTextViewWidth > 0) {
            leftTextViewParams.width = leftTextViewWidth;
        }
        if (leftTextViewHeight > 0) {
            leftTextViewParams.height = leftTextViewHeight;
        }

        if (leftTextViewMarinTop > 0){
            leftTextViewParams.topMargin = leftTextViewMarinTop;
        }

        leftTextView.setPadding(leftTextViewPaddingLeft, leftTextViewPaddingTop, leftTextViewPaddingRight, leftTextViewPaddingBottom);
        leftTextView.setGravity(Gravity.CENTER);
        leftTextView.setTextColor(leftTextViewColor);
        leftTextView.setTextSize(leftTextViewTextSize);
        if (leftTextViewBackground != null) {
            leftTextView.setBackground(leftTextViewBackground);
        } else {
            leftTextView.setBackground(this.getResources().getDrawable(R.drawable.shape_rectangle_solid_ffb400_corner5));
        }
        leftTextView.setLayoutParams(leftTextViewParams);


        LayoutParams rightTextViewParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightTextView.setTextColor(rightTextViewColor);
        rightTextView.setTextSize(righhtTextViewTextSize);
        rightTextView.setMaxLines(rightTextViewMaxLines);
        rightTextView.setEllipsize(TextUtils.TruncateAt.END);
        rightTextView.setLayoutParams(rightTextViewParams);

        this.addView(leftTextView);
        this.addView(rightTextView);


    }

 /**
     * @date 创建时间:2021/4/27 0027
     * @auther gaoxiaoxiong
     * @Descriptiion 设置左右的文字
     **/
    public void setLeftRightTextValue(String leftTextViewTextValue, String rightTextViewTexTValue) {
        if (TextUtils.isEmpty(leftTextViewTextValue)) {
            leftTextViewTextValue = "";
        }

        if (TextUtils.isEmpty(rightTextViewTexTValue)) {
            rightTextViewTexTValue = "";
        }

        if (!StringUtils.isEmpty(leftTextViewTextValue)){
            leftTextView.setVisibility(View.VISIBLE);
            leftTextView.setText(leftTextViewTextValue);
            final SpannableString spannableString = new SpannableString(rightTextViewTexTValue);
            leftTextView.post(new Runnable() {
                @Override
                public void run() {
                    int dis = leftRightDistance + leftTextView.getWidth();
                    LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(dis, 0);
                    spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
                    rightTextView.setText(spannableString);
                }
            });
        }else {
            leftTextView.setVisibility(View.GONE);
            SpannableString spannableString = new SpannableString(rightTextViewTexTValue);
            LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(0, 0);
            spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
            rightTextView.setText(spannableString);
        }
    }

    /**
     * @date 创建时间:2021/4/27 0027
     * @auther gaoxiaoxiong
     * @Descriptiion 设置左右的文字 + 设置背景
     **/
    public void setLeftRightTextValue(String leftTextViewTextValue, String rightTextViewTexTValue,Drawable leftTextViewBackground){
        if (TextUtils.isEmpty(leftTextViewTextValue)) {
            leftTextViewTextValue = "";
        }

        if (TextUtils.isEmpty(rightTextViewTexTValue)) {
            rightTextViewTexTValue = "";
        }

        if (!StringUtils.isEmpty(leftTextViewTextValue)){
            if (leftTextViewBackground!=null){
                leftTextView.setBackground(leftTextViewBackground);
            }
            leftTextView.setVisibility(View.VISIBLE);
            leftTextView.setText(leftTextViewTextValue);
            final SpannableString spannableString = new SpannableString(rightTextViewTexTValue);
            leftTextView.post(new Runnable() {
                @Override
                public void run() {
                    int dis = leftRightDistance + leftTextView.getWidth();
                    LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(dis, 0);
                    spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
                    rightTextView.setText(spannableString);
                }
            });
        }else {
            leftTextView.setVisibility(View.GONE);
            SpannableString spannableString = new SpannableString(rightTextViewTexTValue);
            LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(0, 0);
            spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
            rightTextView.setText(spannableString);
        }

    }


    public TextView getLeftTextView() {
        return leftTextView;
    }

    public TextView getRightTextView() {
        return rightTextView;
    }
}

相关文章

网友评论

      本文标题:新 TextView 换行,左边是其它控件

      本文链接:https://www.haomeiwen.com/subject/txxprltx.html