日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

3.Android 优化布局(解决TextView布局)

發布時間:2025/3/14 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.Android 优化布局(解决TextView布局) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://www.jianshu.com/p/d3027acf475a

今天分享一個Layout布局中的一個小技巧,希望看過之后你也可以寫出性能更好的布局,我個人的目的是用最少的view寫出一樣的效果布局

用TextView同時顯示圖片和文字:

先看一下效果圖


圖像 3.png
以上這四塊區域相信大家在項目中經常遇到吧!(一般的寫法ImageView與TextView的組合)現在用一個自定義的TextView就完成能達到一樣的效果,并且也可以設置背景選擇器、圖片的尺寸大小,不需要嵌套多層布局在設置相關的屬性

第一塊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_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); } /** * 設置左側圖片并重繪 */ public void setDrawableLeft(Drawable drawableLeft) { this.drawableLeft = drawableLeft; invalidate(); } /** * 設置左側圖片并重繪 */ public void setDrawableLeft(int drawableLeftRes) { this.drawableLeft = mContext.getResources().getDrawable(drawableLeftRes); invalidate(); } /** * 設置右側圖片并重繪 */ public void setDrawableRight(Drawable drawableRight) { this.drawableRight = drawableLeft; invalidate(); } /** * 設置右側圖片并重繪 */ public void setDrawableRight(int drawableRightRes) { this.drawableRight = mContext.getResources().getDrawable(drawableRightRes); invalidate(); } /** * 設置上部圖片并重繪 */ public void setDrawable(Drawable drawableTop) { this.drawableTop = drawableTop; invalidate(); } /** * 設置右側圖片并重繪 */ 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>

以上為全部代碼

?

轉載于:https://www.cnblogs.com/benchao/p/6056157.html

總結

以上是生活随笔為你收集整理的3.Android 优化布局(解决TextView布局)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。