布局的重复使用
来源:互联网 发布:网站数据库对接 编辑:程序博客网 时间:2024/06/10 22:01
首先,必须明白自己要做什么样子的重复布局,以图1为例,创建一个自定义布局:(图1)。有三个组件,一个TextView(设置你想输入的信息,如姓名等),一个ImageView(用来显示头像),最后是一个EditText(显示输入的文字);你可以根据自己的需求进行更换图片,和TextView中的文字或者字体的颜色等。具体步骤如下:
1.在res->values文件夹下建立一个Resource Type的类型为Values、名为attrs的xml文件,在<resouece>节点下添加如下代码:
<span style="font-size:18px;"><declare-styleable name="MyView"> <attr name="text_color" format="reference|color" /> <attr name="image_drawable" format="reference" /> <attr name="text" format="reference|string"></attr> </declare-styleable></span>这段代码的作用是声明自定义控件在R文件的名字,即:MyView,以及你要进行的属性设置(头像等的设置)的名字(如代码中的text_color)和取值(如代码中的reference),这些属性具体怎么设置,就像你用Android系统中的组件一样,可以这样使用app:text_color=”#666666“这样进行设置;其中,取值为”reference“意味着来自设置的值,假如是color或者是String则代表该属性有默认值可以取,如果同时存在,reference优先选取。
2.创建一个类(MyView)继承自RelativeLayout,重载三个构造方法,参数少的调用参数多的,在三个参数的构造方法中进行代码编辑:(1)声明如下全局变量:(由于ImageView和EditText需要在一个布局上才能显示,所以定义两个布局参数imageLayout、etLayout)。
private TextView textView ;private LayoutParams imageLayout ;private ImageView iv ;private LayoutParams etLayout ;private EditText editText ;(2)获取你所设置的属性,主要是根据在attrs中设置的属性进行获取,一般来说在<resouece>的节点下有节点,就获取及格属性;根据上下文对象,调用静态方法obtainStyleAttributes(*所在res目录下的文件名* ,*该文件所在的位置,自定义控件在R文件的名字*),并且返回一个TypeArray类型的数组。根据不同属性的不同取值进行在TypeArray中进行获取,最后记得recycle这个数组。
TypedArray typedArray = context.obtainStyledAttributes(attrs , R.styleable.MyView) ;int textColor = typedArray.getColor(R.styleable.MyView_text_color, Color.RED) ;int drawable = typedArray.getResourceId(R.styleable.MyView_image_drawable ,R.drawable.ic_launcher) ;String text = typedArray.getString(R.styleable.MyView_text) ;typedArray.recycle() ;(3)根据上一步获取的值,对各个组件进行初始化、属性设置和位置设置,由于ImageView和EditText需要在一个布局参数上才能显示,所以需要把他们添加到布局参数中
textView的设置:
textView = new TextView(context) ;textView.setId(5) ;textView.setText(text) ;textView.setTextColor(textColor) ;imageView的设置:
imageLayout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) ;iv = new ImageView(context) ;iv.setId(6) ;iv.setImageResource(drawable) ;imageLayout.addRule(RelativeLayout.BELOW, 5) ;imageLayout.setMargins(0, 30 , 0, 0) ;EditText的设置:
etLayout = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) ;editText = new EditText(context) ;editText.setId(7) ;editText.setHint("input...") ;etLayout.addRule(RelativeLayout.RIGHT_OF, 6) ;etLayout.addRule(RelativeLayout.ALIGN_BOTTOM, 6) ;(4)最后,调用addView()方法进行添加组件,有布局参数的组件需要都添加。
addView(textView) ;addView(iv, imageLayout) ;addView(editText, etLayout) ;至此,一个自定义的布局文件已经建立完成。
最后是,自定义布局的使用:
例如你想在MainActivity中使用,需在其头部布局文件的中加入
<span style="font-size:18px;">xmlns:app="http://schemas.android.com/apk/res/*MainActivity的包名*"</span>
ps:app这个名字可以随意。
在你想调用这个复用布局的地方写入一个节点,节点的名称是你所写MyView类的位置(包名+类名),之后,和普通的组件使用相同,在下面设置高、宽,注:假如你想要设置自定义控件中的属性,就需要用到上面在头文件中注册的名字是app的标记,使用方法为app:*在attrs中注册的属性名称*="*你想要的值*"
<pre name="code" class="html"><cn.com.tarena.recycle.view.MyView android:id="@+id/auto" android:layout_width="wrap_content" android:layout_height="wrap_content" app:text_color="#FFFF00" app:text="GSD1507" app:image_drawable="@drawable/headimage10" />
总结:自定义的重复布局的具体流程可以理解为这样:当MainActivity加载这个自定义布局时,它会通过attrs文件获取到你想要显示的值,然后再以一个Layout的形式,显示在MainActivity上面。
以上仅是个人理解。
- 布局的重复使用
- 文件变量的重复使用
- UITableView cell的重复使用
- InputStream对象的重复使用
- 可重复使用程序代码 + 可重复使用模型 = 更高的生产力
- 可重复使用程序代码 + 可重复使用模型 = 更高的生产力
- 可重复使用程序代码 + 可重复使用模型 = 更高的生产力
- 可重复使用程序代码 + 可重复使用模型 = 更高的生产力
- 将打印纸重复使用的打印机
- robotframework中变量的重复使用
- 可重复使用的JS函数
- 关于重复使用InputStream对象的
- Android中使用include标签和merge标签重复使用布局
- Android中使用include标签和merge标签重复使用布局
- Android布局优化之使用style提取重复使用属性
- ImageView重复使用的时候导致的OutOfMemoryError
- iOS可重复使用的折叠式表视图
- 如何重复使用相同内容的脚注?
- 计步准确,算法智能——体验连爱智能手环
- 客户端和服务端交互的三种方式
- java线程基础知识和小案例
- Dev C++报告窗口不能自动弹出
- SDWebImage源码解析之SDWebImageManager的注解
- 布局的重复使用
- bzoj1618【Usaco2008 Nov】Buying Hay 购买干草
- svn 命令行下常用的几个命令
- 黑马程序员——OC类的初始化与点语法
- Android依赖注入类库 Butter Knife的使用
- 线程:sleep()、wait()、yield()和join()方法
- 【设计模式】——原型模式VS模板方法模式
- iOS 多线程
- hdu 1200 To and Fro