Android 之 自定义标签 和 自定义组件
1 自定义标签
mm_tag.xml (切记不可出现大写,只能是 小写字母、数字、下划线)
第一步: 自定义 标签
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="GridItem">
<attr name="bkground" format="reference|color"/>
<attr name="text1" format="string"/>
<attr name="text2" format="string"/>
<attr name="image" format="reference|integer"/>
</declare-styleable>
</resources>
//属性定义:
< declare -styleable name = "名称" >
<attr name = "orientation" >
<enum name = "horizontal" value = "0" />
<enum name = "vertical" value = "1" />
</attr>
</ declare -styleable> //属性使用:
<LinearLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
</LinearLayout>
//属性定义:
< declare -styleable name = "名称" >
<attr name = "windowSoftInputMode" >
<flag name = "stateUnspecified" value = "0" />
<flag name = "stateUnchanged" value = "1" />
<flag name = "stateHidden" value = "2" />
</attr>
</ declare -styleable> //属性使用:
<activity
android: name = ".StyleAndThemeActivity"
android:label = "@string/app_name"
android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden" >
<intent-filter>
< action android: name = "android.intent.action.MAIN" />
<category android: name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//属性定义:
< declare -styleable name = "名称" >
<attr name = "background" format = "reference|color" />
</ declare -styleable> //属性使用:
<ImageView
android:layout_width = "42dip"
android:layout_height = "42dip"
android: background = "@drawable/图片ID|#00FF00" />
第二步: 在自定义组件中获得标签传回的数据
xmlns:griditem = "http://schemas.android.com/apk/res/com.mm.template"
//对比下 android 的命名空间:
xmlns:android = "http://schemas.android.com/apk/res/android"
< com.mm.template.GridItem
griditem:image = "@drawable/mm_1"
android:padding = "5dp"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
griditem:bkground = "@color/orange"
griditem:text1 = "Android" griditem:text2 = "手机开发" />
griditem:image = "@drawable/mm_1"
griditem:bkground = "@color/orange"
griditem:text1 = "Android"
griditem:text2 = "手机开发"
public GridItem(Context context, AttributeSet attrs) {
super(context, attrs); TypedArray typedarray=context.obtainStyledAttributes(attrs, R.styleable.GridItem); bk_color =typedarray.getResourceId(R.styleable.GridItem_bkground, R.color.burlywood);
text1 =typedarray.getString(R.styleable.GridItem_text1);
text2 =typedarray.getString(R.styleable.GridItem_text2);
image=typedarray.getDrawable(R.styleable.GridItem_image); typedarray.recycle(); view=LayoutInflater.from(context).inflate(R.layout.mm_grid_item, this,true); layout=(LinearLayout)view.findViewById(R.id.item_layout);
textview1=(TextView)view.findViewById(R.id.text1);
textview2=(TextView)view.findViewById(R.id.text2);
imageview=(ImageView)view.findViewById(R.id.imageview); layout.setBackgroundResource(bk_color); //设置背景色
textview1.setText(text1); //设置第一行文字
textview2.setText(text2); //设置第二行文字
imageview.setImageDrawable(image); //设置图标
}
2 自定义组件
package com.mm.template; import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; public class GridItem extends LinearLayout { private int bk_color; //背景色
private String text1; //第一行文字
private String text2; //第二行文字
private Drawable image; //图标 private LinearLayout layout;
private TextView textview1;
private TextView textview2;
private ImageView imageview; private View view; public GridItem(Context context, AttributeSet attrs) {
super(context, attrs); TypedArray typedarray=context.obtainStyledAttributes(attrs, R.styleable.GridItem); bk_color =typedarray.getResourceId(R.styleable.GridItem_bkground, R.color.burlywood);
text1 =typedarray.getString(R.styleable.GridItem_text1);
text2 =typedarray.getString(R.styleable.GridItem_text2);
image=typedarray.getDrawable(R.styleable.GridItem_image); typedarray.recycle(); view=LayoutInflater.from(context).inflate(R.layout.mm_grid_item, this,true); layout=(LinearLayout)view.findViewById(R.id.item_layout);
textview1=(TextView)view.findViewById(R.id.text1);
textview2=(TextView)view.findViewById(R.id.text2);
imageview=(ImageView)view.findViewById(R.id.imageview); layout.setBackgroundResource(bk_color); //设置背景色
textview1.setText(text1); //设置第一行文字
textview2.setText(text2); //设置第二行文字
imageview.setImageDrawable(image); //设置图标
} }
这个自定义组件 GridItem 用到的布局文件
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android: id = "@+id/item_layout"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
android: background = "@color/black"
android:padding = "3dp"
android:paddingLeft = "6dp"
tools:ignore = "HardcodedText,ContentDescription" >
< TextView
android: id = "@+id/text1"
android:layout_weight = "1"
style = "@style/MM_TextView" />
< TextView
android: id = "@+id/text2"
android:layout_weight = "1"
android:textSize = "12sp"
style = "@style/MM_TextView" />
< ImageView
android: id = "@+id/imageview"
android:layout_width = "wrap_content"
android:layout_height = "0dp"
android:layout_gravity = "right"
android: src = "@drawable/mm_title_1"
android:layout_weight = "2"
android:layout_marginTop = "10dp"
android:scaleType = "fitCenter" /> <!--图片缩放
android:scaleX="0.8"
android:scaleY="0.8" --> </ LinearLayout >
3 使用方法
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
xmlns:griditem = "http://schemas.android.com/apk/res/com.mm.template"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android: background = "@color/white"
android:orientation = "vertical"
tools:ignore = "HardcodedText,ContentDescription,NestedWeights" > <!-- Head start -->
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "44dp"
android:orientation = "horizontal"
android:padding = "10dp"
android: background = "@color/red" >
< ImageView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android: src = "@drawable/mm_title_1" />
< TextView
android:layout_width = "0dp"
android:layout_height = "match_parent"
android:layout_weight = "1"
android:gravity = "center"
android: text = "测试案例"
android:textStyle = "bold"
android:textSize = "16sp"
android:textColor = "@android:color/white" />
< ImageView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android: src = "@drawable/mm_title_2" />
</ LinearLayout >
<!-- Head end --> <!-- Search start-->
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "36dp"
android:orientation = "vertical"
android:paddingTop = "3dp"
android:layout_margin = "8dp" >
< EditText
android: id = "@+id/search_edit"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:drawableLeft = "@drawable/mm_search"
android: background = "@drawable/mm_shape_editview"
android:hint = "请输入关键字"
android:textSize = "16sp"
android:textColorHint = "@color/darkgray"
android:textStyle = "bold"
android:padding = "6dp" />
</ LinearLayout >
<!-- Search end -->
<!-- GridItem start -->
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:layout_weight = "1"
android:orientation = "horizontal"
android:layout_margin = "10dp" >
< com.mm.template.GridItem
griditem:image = "@drawable/mm_1"
android:padding = "5dp"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
griditem:bkground = "@color/orange"
griditem:text1 = "Android"
griditem:text2 = "手机开发" />
< com.mm.template.GridItem
griditem:image = "@drawable/mm_2"
android:padding = "5dp"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
griditem:bkground = "@color/blueviolet"
griditem:text1 = "C++"
griditem:text2 = "编程语言" />
< com.mm.template.GridItem
griditem:image = "@drawable/mm_3"
android:padding = "5dp"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_weight = "1"
griditem:bkground = "@color/blue"
griditem:text1 = "服务端"
griditem:text2 = "后台开发" />
</ LinearLayout >
<!-- GridItem end --> </ LinearLayout >
4 结果展示
Android 之 自定义标签 和 自定义组件的更多相关文章
- 写一个可插入自定义标签的 Textarea 组件
- “插入自定义标签是什么鬼?” - “比如你要插入一个<wise></wise>的标签...” - “什么情况下会有这种需求?” - “得罪了产品的情况下...” 一.需求背 ...
- Jsp开发自定义标签,自定义标签将字符串转成指定的时间格式显示
本例以将 字符串格式的时间转成指定的时间格式显示. 第一步.定义一个标签处理程序类,需要集成javax.servlet.jsp.tagext.TagSupport,代码如下: import java. ...
- Struts2自定义标签4自定义分页标签
第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。
Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...
- django-DIL模板自定义过滤器,自定义标签,自定义包含标签
自定义过滤器 DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求.因此django提供了一个接口,让开发者能自定义标签和过滤器. 首先,你需要添加一个t ...
- django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)
常用: Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ 变量名 }} 变量名由字母数字和下 ...
- 杂项-Java:自定义标签
ylbtech-杂项-Java:自定义标签 1.返回顶部 1. 一般我们说自定义标签是指JSP自定义标签.自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码.自定义标签是可重用的组 ...
- EL函数以及自定义标签的应用
一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...
- JSTL自定义标签
这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的Java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但 ...
随机推荐
- List、Set、Map的使用
1.List(接口) List接口的特点: a.List接口可以存放任意数据,且在接口中,数据可以重复. b.List中提供了高效的插入和移除多个元素的方法. List常用的子类 a.ArrayLis ...
- 对ajax的hack的分析
先上原文链接:对jQuery ajax请求成功(失败)回调执行前的统一处理(兼容较老版本jQuery) 原文中已经提到了使用场景了,我觉得这非常适合单页面应用,还有backbone应用中.毕竟ajax ...
- [转] iOS SDK:iOS调试技巧
原文: http://www.cocoachina.com/ios/20130517/6225.html 为什么你的数组包含3个项目而不是5个?为什么你的游戏运行缓慢?这些都跟调试有关,调试是开发过 ...
- Objective-C中的内存管理——手动内存管理
一.引用计数(retainCount) 1.内存的申请 alloc和new是Objective-C语言中申请内存的两种常用方式. 当我们向一个类对象发送一个alloc消息的时候,其会向操作系统在堆中申 ...
- Xcode7 通过 Single View Application 得到一个 Empty Application 工程
方法: 创建一个 Empty Application 工程 下面还是详细的说一下通过一个 Single View Application 工程得到一个 Empty Application 工程的方法: ...
- CSS 布局Float 【3】
float 属性定义元素在哪个方向浮动. 浮动元素会生成一个块级框,而不论它本身是何种元素. 如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 注释:假如在一行之上只有极少的空间可 ...
- 安卓 报错 Check the Eclipse log for stack trace.
移除Android Dependencies就行了. 在properties的Libraries里
- Hibernate 一对多双向关联Demo
以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { privat ...
- 【转】C++之内部类(嵌套类)与外部类及友元
[转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...
- 下拉列表框 select 动态赋值
<tr> <td class="label">所属群组:</td> <td> <select name="group ...