3.Android 优化布局(解决TextView布局)
生活随笔
收集整理的這篇文章主要介紹了
3.Android 优化布局(解决TextView布局)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載:http://www.jianshu.com/p/d3027acf475a
今天分享一個Layout布局中的一個小技巧,希望看過之后你也可以寫出性能更好的布局,我個人的目的是用最少的view寫出一樣的效果布局
用TextView同時顯示圖片和文字:
先看一下效果圖
圖像 3.png
以上這四塊區(qū)域相信大家在項目中經(jīng)常遇到吧!(一般的寫法ImageView與TextView的組合)現(xiàn)在用一個自定義的TextView就完成能達(dá)到一樣的效果,并且也可以設(shè)置背景選擇器、圖片的尺寸大小,不需要嵌套多層布局在設(shè)置相關(guān)的屬性
第一塊Xml中的代碼
<com.~~~~~~.TextDrawableandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/textdrawable"android:clickable="true" android:drawablePadding="10dp" android:gravity="center_vertical" android:padding="@dimen/space_20" android:text="設(shè)置" android:textColor="@color/black_252c3d" android:textSize="@dimen/textsize_20sp_in_normal" app:leftDrawable="@drawable/tab_more_unselect" app:leftDrawableHeight="@dimen/space_60" app:leftDrawableWidth="@dimen/space_60" app:rightDrawable="@drawable/iconfont_youjiantou" app:rightDrawableHeight="20dp" app:rightDrawableWidth="10dp" /> <Space android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/gray_888888" />下面的分割線我建議用Space這個控件,它是一個非常輕量級的控件
第二塊Xml中的代碼
<com.~~~~~~.TextDrawableandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/textdrawable"android:clickable="true" android:drawablePadding="10dp" android:gravity="center_vertical" android:padding="@dimen/space_20" android:text="消息" android:textColor="@color/black_252c3d" android:textSize="@dimen/textsize_20sp_in_normal" app:leftDrawable="@drawable/tab_speech_unselect" app:leftDrawableHeight="@dimen/space_60" app:leftDrawableWidth="@dimen/space_60" />第三塊Xml中的代碼
<com.~~~~~~.TextDrawableandroid:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:background="@drawable/textdrawable" android:clickable="true" android:drawablePadding="10dp" android:gravity="center" android:padding="@dimen/space_20" android:text="首頁" android:textColor="@color/colorPrimary" android:textSize="@dimen/textsize_20sp_in_normal" app:topDrawable="@drawable/tab_home_select" app:topDrawableHeight="@dimen/space_60" app:topDrawableWidth="@dimen/space_60" />第四塊Xml中的代碼(圖片按鈕)
<com.hightsstudent.highsstudent.ui.widget.TextDrawableandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/textdrawable"android:clickable="true" android:drawablePadding="10dp" android:gravity="center_vertical" android:padding="@dimen/space_15" android:text="退出" android:textColor="@color/black_252c3d" android:textSize="@dimen/textsize_20sp_in_normal" app:rightDrawable="@drawable/icon_backs" app:rightDrawableHeight="@dimen/space_80" app:rightDrawableWidth="@dimen/space_80" />下面貼出TextDrawable.java代碼
/*** Created by Dengxiao on 2016/11/8.*/public class TextDrawable extends TextView {private Drawable drawableLeft; private Drawable drawableRight; private Drawable drawableTop; private int leftWidth; private int rightWidth; private int topWidth; private int leftHeight; private int rightHeight; private int topHeight; private Context mContext; public TextDrawable(Context context) { this.mContext=context; this(context, null, 0); } public TextDrawable(Context context, AttributeSet attrs) { this.mContext=context; this(context, attrs, 0); } public TextDrawable(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext=context; init(context, attrs); } private void init(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TextDrawable); drawableLeft = typedArray.getDrawable(R.styleable.TextDrawable_leftDrawable); drawableRight = typedArray.getDrawable(R.styleable.TextDrawable_rightDrawable); drawableTop = typedArray.getDrawable(R.styleable.TextDrawable_topDrawable); if (drawableLeft != null) { leftWidth = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_leftDrawableWidth, dip2px(context, 20)); leftHeight = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_leftDrawableHeight, dip2px(context, 20)); } if (drawableRight != null) { rightWidth = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_rightDrawableWidth, dip2px(context, 20)); rightHeight = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_rightDrawableHeight, dip2px(context, 20)); } if (drawableTop != null) { topWidth = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_topDrawableWidth, dip2px(context, 20)); topHeight = typedArray.getDimensionPixelOffset(R.styleable.TextDrawable_topDrawableHeight, dip2px(context, 20)); } } public int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (drawableLeft != null) { drawableLeft.setBounds(0, 0, leftWidth, leftHeight); } if (drawableRight != null) { drawableRight.setBounds(0, 0, rightWidth, rightHeight); } if (drawableTop != null) { drawableTop.setBounds(0, 0, topWidth, topHeight); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); this.setCompoundDrawables(drawableLeft, drawableTop, drawableRight, null); } /** * 設(shè)置左側(cè)圖片并重繪 */ public void setDrawableLeft(Drawable drawableLeft) { this.drawableLeft = drawableLeft; invalidate(); } /** * 設(shè)置左側(cè)圖片并重繪 */ public void setDrawableLeft(int drawableLeftRes) { this.drawableLeft = mContext.getResources().getDrawable(drawableLeftRes); invalidate(); } /** * 設(shè)置右側(cè)圖片并重繪 */ public void setDrawableRight(Drawable drawableRight) { this.drawableRight = drawableLeft; invalidate(); } /** * 設(shè)置右側(cè)圖片并重繪 */ public void setDrawableRight(int drawableRightRes) { this.drawableRight = mContext.getResources().getDrawable(drawableRightRes); invalidate(); } /** * 設(shè)置上部圖片并重繪 */ public void setDrawable(Drawable drawableTop) { this.drawableTop = drawableTop; invalidate(); } /** * 設(shè)置右側(cè)圖片并重繪 */ public void setDrawableTop(int drawableTopRes) { this.drawableTop = mContext.getResources().getDrawable(drawableTopRes); invalidate(); } }附上attrs:
<declare-styleable name="TextDrawable"><attr name="leftDrawable" format="reference"/> <attr name="leftDrawableWidth" format="dimension"/> <attr name="leftDrawableHeight" format="dimension"/> <attr name="rightDrawable" format="reference"/> <attr name="rightDrawableWidth" format="dimension"/> <attr name="rightDrawableHeight" format="dimension"/> <attr name="topDrawable" format="reference"/> <attr name="topDrawableWidth" format="dimension"/> <attr name="topDrawableHeight" format="dimension"/> </declare-styleable>以上為全部代碼
?
轉(zhuǎn)載于:https://www.cnblogs.com/benchao/p/6056157.html
總結(jié)
以上是生活随笔為你收集整理的3.Android 优化布局(解决TextView布局)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。