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

可以定义的参数
设置左边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;
}
}
网友评论