Android 自定义View时使用TypedArray配置样式属性详细介绍

Android 自定义View时使用TypedArray配置样式属性详细介绍,第1张

概述 Android自定义View时使用TypedArray配置样式属性详细介绍      在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源、文字大小

 AndroID 自定义view时使用TypedArray配置样式属性详细介绍

      在自定义view时为了提高复用性和扩展性,可以为自定义的vIEw添加样式属性的配置,比如自定义图片资源、文字大小、控件属性等,就这需要用到TypedArray类,下面以一个自定义的可点击扩展和收缩的TextVIEw为例记录下这个类的简单使用。

先上效果图:

点击以后为


再贴代码:

1.自定义view类;

/**  * @Title ExpandTextVIEw  * @description 可扩展TextVIEw,可以通过设置ExpandTextVIEwStyle来自定义展开图片、收起图片和最小展示的行数  */ public class ExpandTextVIEw extends linearLayout implements OnClickListener {   /**    * 默认最少展示的行数    */   private int defaultMinlines;   /**    * 是否展开    */   private boolean mCollapsed = true;   /**    * 是否重新布局    */   private boolean mRelayout = false;    private VIEw expandVIEw;   private TextVIEw expandText;   private ImageVIEw expandimg;   private Drawable mExpandDrawable;   private Drawable mCollapseDrawable;    public ExpandTextVIEw(Context context) {     this(context,null);   }    public ExpandTextVIEw(Context context,AttributeSet attrs) {     super(context,attrs);     init(attrs);   }    private voID init(AttributeSet attrs) {     expandVIEw = LayoutInflater.from(getContext()).inflate(         R.layout.pt__expand_textvIEw,null);     expandText = (TextVIEw) expandVIEw.findVIEwByID(R.ID.expand_text);     expandText.setonClickListener(this);     expandimg = (ImageVIEw) expandVIEw.findVIEwByID(R.ID.expand_img);     expandimg.setonClickListener(this);      TypedArray a = getContext().obtainStyledAttributes(attrs,R.styleable.ExpandTextVIEwStyle);     // 自定义图片资源     mExpandDrawable = getResources().getDrawable(         a.getResourceID(R.styleable.ExpandTextVIEwStyle_expand,R.drawable.pt__ic_expand));     expandimg.setBackgroundDrawable(mExpandDrawable);     mCollapseDrawable = getResources().getDrawable(         a.getResourceID(R.styleable.ExpandTextVIEwStyle_collapse,R.drawable.pt__ic_collapse));     // 自定义最小行数     defaultMinlines = a.getInt(         R.styleable.ExpandTextVIEwStyle_default_min_lines,2);     a.recycle();      linearLayout.LayoutParams params = new LayoutParams(         LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);     params.gravity = Gravity.CENTER;     addVIEw(expandVIEw,params);   }    @OverrIDe   protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) {     if (!mRelayout) {       super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);       return;     }     mRelayout = false;     expandText.setMaxlines(Integer.MAX_VALUE);     expandimg.setVisibility(VIEw.GONE);     super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);     if (expandText.getlineCount() <= defaultMinlines) {       return;     }     if (mCollapsed) {       expandText.setMaxlines(defaultMinlines);     }     expandimg.setVisibility(VIEw.VISIBLE);     super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);   }    public voID setText(CharSequence text) {     mRelayout = true;     expandText.setText(text);   }    public voID setText(int resID) {     this.setText(getContext().getString(resID));   }    @OverrIDe   public voID onClick(VIEw vIEw) {     if (expandimg.getVisibility() != VIEw.VISIBLE) {       return;     }     mCollapsed = !mCollapsed;     expandimg.setBackgroundDrawable(mCollapsed ? mExpandDrawable         : mCollapseDrawable);     expandText         .setMaxlines(mCollapsed ? defaultMinlines : Integer.MAX_VALUE);   } } 

2.在res/values下添加的attrs.xml文件中定义样式属性;

<resources>    <!-- ******************************可扩展ExpandTextVIEw样式******************************* -->   <declare-styleable name="ExpandTextVIEwStyle">      <!-- 展开图片 -->     <attr name="expand" format="reference" />     <!-- 关闭图片 -->     <attr name="collapse" format="reference" />     <!-- 最小行数 -->     <attr name="default_min_lines" format="integer" />   </declare-styleable>  </resources> 

3.在res/values下的style.xml文件中定义样式,可替换图片资源;

<!-- 可扩展ExpandTextVIEw样式 -->   <style name="ExpandTextVIEwStyle">     <item name="expand">@drawable/pt__ic_expand</item>     <item name="collapse">@drawable/pt__ic_collapse</item>     <item name="default_min_lines">3</item>   </style> 

4.布局文件;

<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   xmlns:custom="http://schemas.androID.com/apk/res/com.example.typedarraytest"   androID:layout_wIDth="match_parent"   androID:layout_height="match_parent"   androID:paddingBottom="@dimen/activity_vertical_@R_502_5553@"   androID:paddingleft="@dimen/activity_horizontal_@R_502_5553@"   androID:paddingRight="@dimen/activity_horizontal_@R_502_5553@"   androID:paddingtop="@dimen/activity_vertical_@R_502_5553@" >    <com.example.typedarraytest.ExpandTextVIEw     androID:ID="@+ID/expand_text_vIEw"          androID:layout_wIDth="fill_parent"     androID:layout_height="wrap_content"     androID:layout_@R_502_5553@="8dp"     custom:default_min_lines="2" />  </relativeLayout> 

下面简单描述下实现步骤:

1.先定义好attrs.xml文件;

2.在自定义view类中获取定义的样式属性,下面这几行代码是关键:

TypedArray a = getContext().obtainStyledAttributes(attrs,R.styleable.ExpandTextVIEwStyle); // 自定义图片资源 mExpandDrawable = getResources().getDrawable(     a.getResourceID(R.styleable.ExpandTextVIEwStyle_expand,R.drawable.pt__ic_expand)); expandimg.setBackgroundDrawable(mExpandDrawable); mCollapseDrawable = getResources().getDrawable(     a.getResourceID(R.styleable.ExpandTextVIEwStyle_collapse,R.drawable.pt__ic_collapse)); // 自定义最小行数 defaultMinlines = a.getInt(     R.styleable.ExpandTextVIEwStyle_default_min_lines,2); a.recycle(); 

3.既可以直接在style.xml中定义样式然后使用,也可以在布局文件中配置属性:

custom:default_min_lines="2"

要使用上面的属性,需要在布局文件的根节点中添加如下属性:

xmlns:custom=http://schemas.androID.com/apk/res/com.example.typedarraytest

格式:xmlns:自定义关键字(用于在控件中使用属性,同androID)=http://schemas.androID.com/apk/res/包名

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android 自定义View时使用TypedArray配置样式属性详细介绍全部内容,希望文章能够帮你解决Android 自定义View时使用TypedArray配置样式属性详细介绍所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存