复合控件是将一组相互关联的已有控件整合,从而可以当作单个控件使用。
创建复合控件的步骤:
- 创建一个扩展布局的类
- 实现构造方法,并在构造方法中,首先实现超类的构造方法super(...)
- 复合组件可以像其他视图一样在XML中声明创建,组件名为该类的完整名称(包名+类名),并在构造方法中实现超类构造方法super(Context contex, AttributeSet attrs)。
- 通过attrs获取自定义属性值,对子控件进行初始化设置。
- 根据需要扩展该复合组件方法
示例代码:
图标控件(包含图标和标题)
package lizhen.appstore.ext;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* 图标(图标+标题)
* */
public class Icon extends LinearLayout {
private ImageButton icon; //图标
private TextView title; //标题
public Icon(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(VERTICAL); //设置方向竖直
/*
* 图标初始化
* */
icon = new ImageButton(context);
int srcID = attrs.getAttributeResourceValue(null, "src", 0);
if(srcID == 0) {
//TODO
} else {
icon.setImageResource(srcID);
}
LayoutParams layoutParames = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
icon.setPadding(5, 5, 5, 5);
addView(icon, layoutParames);
/*
* 标题初始化
* */
title = new TextView(context);
int textID = attrs.getAttributeResourceValue(null, "text", 0);
if(textID == 0) {
//TODO
} else {
title.setText(textID);
}
title.setGravity(Gravity.CENTER_HORIZONTAL);
addView(title, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
/**
* 设置图标图像
* resid 资源ID
* */
public void setImageResource(int resid) {
icon.setImageResource(resid);
}
/**
* 设置图标图像
* drawable Drawable图像
* */
public void setImageResource(Drawable drawable) {
icon.setImageDrawable(drawable);
}
/**
* 设置图标标题
* resid 资源ID
* */
public void setText(int resid) {
title.setText(resid);
}
/**
* 设置图标标题
* text 文本
* */
public void setText(CharSequence text) {
title.setText(text);
}
/**
* 设置图标点击事件监听器
* listener 点击事件监听器
* */
public void setOnIconClickListner(View.OnClickListener listener) {
icon.setOnClickListener(listener);
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<lizhen.appstore.ext.Icon
android:id="@+id/icon"
src="@drawable/icon"
text="@strings/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
分享到:
相关推荐
通过本示例,初学者可以快速掌握如何自定义Android复合控件的技巧
现在我们公司得app都是差不多得title,所以抽时间自己撸了个常用得标题栏控件,直接在布局中使用。 不过本人还是推荐使用官方toolbar 等官方 新控件 ,效果太炫了。无奈设计要求这样,所以在这个公司干,为了开发...
复合控件的创建及使用 详见博文http://blog.csdn.net/a87b01c14/article/details/50350405
主要为大家详细介绍了Android自定义复合控件实现通用标题栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android复合控件学习之自定义标题栏;学习自定义属性、接口回调等知识点
《Android 群英传》读书笔记:自定义 View 之创建复合控件
自定义复合控件,支持选中效果及点击事件,非常简单的东西,分享一下,一起学习,欢迎指教
由于是需要创建出具有重用功能的复合控件,所以通常需要继承 ViewGroup ,在给它添加指定功能的控制。给其指定一些可配置的属性,让其具有更强的扩展性。 本例可以简单的创建一个 TopBar 来继承 Rel
Android 自定义切换按钮 获取涵盖此 repo 中代码的教程 通常在创建 Android 应用程序的过程中,开发人员需要创建一个设置页面。... 根据 Android 文档,复合控件允许您“将一个由一组现有控件组成的可
图书简介: 本书从由总到分,让读者从整体上把握Android体系结构,融入“群英传”这一故事情节,针对...3.6.2 创建复合控件 43 3.6.3 重写View来实现全新的控件 51 3.7 自定义ViewGroup 54 .........................
相当漂亮的图表控件。包含动画自定义,复合图表,有很强的扩展性。
6.2.3 复合类型 105 6.2.4 自定义显示位置Toast 106 6.3 对话框 107 6.3.1 文本信息对话框 107 6.3.2 简单列表项对话框 109 6.3.3 单选项列表项对话框 111 6.3.4 复选框列表项对话框 113 6.3.5 复杂布局列表...
3.6.2 创建复合控件 43 3.6.3 重写View来实现全新的控件 51 3.7 自定义View Group 54 3.8 事件拦截机制分析 59 第4章 List View使用技巧 65 4.1 List View常用优化技巧 66 4.1.1 使用View Holder模式提高效率 ...
Android自定义切换按钮获取有关代码的教程。 通常,在创建Android应用程序期间,开发人员将需要创建一个设置页面。 这允许应用程序的用户更改将保留到下一个会话的应用程序设置,例如“启用我的位置”或“显示地图...
把menu做成Tab-Menu(支持分页的Menu),可以容纳比Android传统的menu更丰富的内容(Android的menu超过6项则缩略在[更多]里),本文参考网上的例子的基础上对例子进行简化以及封装,使其作为一个复合控件融入自己的...
学完了这阶段课程,学员将学会开发主流网站的前端效果,比如:焦点图、滚动展示图、网页防复制、网页自定义菜单、WebOS、美女时钟、无刷新评论、评分控件、表格特效、图片悬浮详细信息、微博界面、QQ消息框效果、Div...