寫了一個View ,方便與填寫條例,圖示第一行對齊,第二行一次排列整齊
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.v7.widget.AppCompatTextView; import android.util.AttributeSet; import com.diction.app.android.R; /** * Created by puyaCheer on 2018/4/7. */ public class TextViewDrawable extends AppCompatTextView { private int drawableLeftWidth, drawableTopWidth, drawableRightWidth, drawableBottomWidth; private int drawableLeftHeight, drawableTopHeight, drawableRightHeight, drawableBottomHeight; private boolean isAliganCenter=true; private boolean isDwMath_content=false; private int mWidth, mHeight; public TextViewDrawable(Context context) { this(context, null); } public TextViewDrawable(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public TextViewDrawable(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context, attrs, defStyleAttr); } private void initView(Context context, AttributeSet attrs, int defStyleAttr) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TextViewDrawable); drawableLeftWidth = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableLeftWidth, 0); drawableTopWidth = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableTopWidth, 0); drawableRightWidth = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableRightWidth, 0); drawableBottomWidth = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableBottomWidth, 0); drawableLeftHeight = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableLeftHeight, 0); drawableTopHeight = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableTopHeight, 0); drawableRightHeight = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableRightHeight, 0); drawableBottomHeight = typedArray.getDimensionPixelSize(R.styleable.TextViewDrawable_drawableBottomHeight, 0); isAliganCenter = typedArray.getBoolean(R.styleable.TextViewDrawable_isAliganCenter, true); typedArray.recycle(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } /* @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = w; mHeight = h; Drawable[] drawables = getCompoundDrawables(); Drawable drawableLeft = drawables[0]; Drawable drawableTop = drawables[1]; Drawable drawableRight = drawables[2]; Drawable drawableBottom = drawables[3]; if (drawableLeft != null) { setDrawable(drawableLeft, 0, drawableLeftWidth, drawableLeftHeight); } if (drawableTop != null) { setDrawable(drawableTop, 1, drawableTopWidth, drawableTopHeight); } if (drawableRight != null) { setDrawable(drawableRight, 2, drawableRightWidth, drawableRightHeight); } if (drawableBottom != null) { setDrawable(drawableBottom, 3, drawableBottomWidth, drawableBottomHeight); } this.setCompoundDrawables(drawableLeft,drawableTop,drawableRight,drawableBottom); } */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); mWidth = left; mHeight = top; Drawable[] drawables = getCompoundDrawables(); Drawable drawableLeft = drawables[0]; Drawable drawableTop = drawables[1]; Drawable drawableRight = drawables[2]; Drawable drawableBottom = drawables[3]; if (drawableLeft != null) { setDrawable(drawableLeft, 0, drawableLeftWidth, drawableLeftHeight); } if (drawableTop != null) { setDrawable(drawableTop, 1, drawableTopWidth, drawableTopHeight); } if (drawableRight != null) { setDrawable(drawableRight, 2, drawableRightWidth, drawableRightHeight); } if (drawableBottom != null) { setDrawable(drawableBottom, 3, drawableBottomWidth, drawableBottomHeight); } this.setCompoundDrawables(drawableLeft,drawableTop,drawableRight,drawableBottom); } public void setDrawable(Drawable drawable, int tag, int drawableWidth, int drawableHeight) { //獲取圖片實際長寬 int width = drawableWidth == 0 ? drawable.getIntrinsicWidth() : drawableWidth; int height = drawableHeight == 0 ? drawable.getIntrinsicHeight() : drawableHeight; int left = 0, top = 0, right = 0, bottom = 0; switch (tag) { case 0: case 2: left = 0; top = isAliganCenter ? 0 : -getLineCount() * getLineHeight() / 2 + getLineHeight() / 2; right = width; bottom = top + height; break; case 1: left =isAliganCenter ? 0: -mWidth/2+width/2; top = 0; right = left+width; bottom =top+height; break; } drawable.setBounds(left, top, right, bottom); requestLayout(); } @Override public void setCompoundDrawables(@Nullable Drawable left, @Nullable Drawable top, @Nullable Drawable right, @Nullable Drawable bottom) { super.setCompoundDrawables(left, top, right, bottom); } }
===============================對應的屬性============================================
<declare-styleable name="TextViewDrawable"> <attr name="drawableLeftWidth" format="dimension"/> <attr name="drawableTopWidth" format="dimension"/> <attr name="drawableRightWidth" format="dimension"/> <attr name="drawableLeftHeight" format="dimension"/> <attr name="drawableTopHeight" format="dimension"/> <attr name="drawableRightHeight" format="dimension"/> <attr name="drawableBottomHeight" format="dimension"/> <attr name="drawableBottomWidth" format="dimension"/> <attr name="isAliganCenter" format="boolean"/> </declare-styleable>
使用:
<com.diction.app.android.view.TextViewDrawable android:id="@+id/sys_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:drawableLeft="@drawable/message_unread_bg_shape" android:drawablePadding="10dp" android:padding="5dp" android:text="我是標題,你看了我就沒有紅點點我是標題,你看了我就沒有紅點點" android:textColor="@color/color_000000" android:textSize="15sp" app:isAliganCenter="false"/>
如果這介面卡中需要改變的話,類似於訊息已讀未讀
if (helper.getLayoutPosition() == 3){ Drawable drawable= mContext.getResources().getDrawable(R.drawable.message_read_bg_shpe); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); textViewDrawable.setCompoundDrawablesRelative(drawable,null,null,null); textViewDrawable.requestLayout(); }else{ Drawable drawable= mContext.getResources().getDrawable(R.drawable.message_unread_bg_shape); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); textViewDrawable.setCompoundDrawablesRelative(drawable,null,null,null); textViewDrawable.requestLayout(); }
==== 已讀白色背景
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel="true"> <size android:width="8dp" android:height="8dp" /> <stroke android:width="2dp" android:color="@color/white" /> <solid android:color="@color/white" /> </shape>
===未讀 紅色背景
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel="true"> <size android:width="8dp" android:height="8dp" /> <stroke android:width="2dp" android:color="@color/color_ff3B73" /> <solid android:color="@color/color_ff3B73" /> </shape>
搞定,拷貝直接使用即可
相關文章
- 如何讓文字居右對齊,換行後又居左對齊
- 圖示文字水平對齊方法總結
- 將圖片在div中進行水平和垂直對齊
- CSS 行內對齊的黑魔法CSS
- 圖示和文字無法對齊處理方法
- <摘錄>位元組對齊(強制對齊以及自然對齊)
- 單例--只寫一次就夠了單例
- 文字框與文字垂直對齊程式碼例項
- iOS – 單例模式寫一次就夠了iOS單例模式
- table上下對齊滾動條設定
- [CSS]Input標籤與圖片按鈕對齊CSS
- CSS讓同一行文字和輸入框對齊CSS
- 調整mac應用圖示排列Mac
- 1218 圖片對齊模式模式
- 電腦每天第一次開機很慢很卡,4k對齊,西部資料
- 使檔案中的所有行對齊縮排命令
- 第一次制定<專案管理制度試執行條例> (轉)專案管理
- 對齊之美
- 文字對齊位置
- 位元組對齊
- PowerPoint如何對齊多個物件物件
- UICollectionView左對齊流水佈局、右對齊流水佈局UIView
- [Android]Layout中ImageView中圖片的對齊顯示問題AndroidView
- AUTOCAD——圖紙歪瞭如何對齊
- 寫了一個分段函式,引數是單個數字,執行函式 畫圖函式
- input[type="checkbox"]與label對齊
- 如何寫好一個自定義ViewView
- golang 位元組對齊Golang
- css居中對齊大全CSS
- android空格對齊Android
- [Shell] Sort 和 對齊
- 記憶體對齊記憶體
- linux對齊文字Linux
- 用 Laravel 寫了一個圖床網站Laravel圖床網站
- 如何讓input文字框和圖片對齊
- 第一次嘗試編寫javaJava
- 【5.31】第一次寫部落格
- 人類自身都對不齊,怎麼對齊AI?新研究全面審視偏好在AI對齊中的作用AI