组合控件的使用

开发过程中,多个UI控件需要协同工作,相互交互之后,才可完成一个完整的业务需求,此时可把这些控件封装成为一个整体,相互之间的交互逻辑封装其中,外部调用可无需
关心内部逻辑,只需获取处理后的结果即可

创建组合控件步骤如下:
1.创建xml布局,定义组合控件的外观
2.定义组合控件类,此类一般继承原生ViewGroup控件,如:LinearLayout
3.在组合控件类中获取对应UI控件,编写内部业务需求

ex:
创建一个带textView的Button

1.xml布局文件textview_btn.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:orientation="vertical" >
<TextView android:id="@+id/textView"
android:text="textView"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button android:id="@+id/btn"
android:text="button"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

textview_btn.xml

2.TextViewButton.java

public class TextViewButton extends LinearLayout
{
////////////////////////////////////////////////////////////////////////////////////////////// Controls
/**
*TextView控件引用
*/
private TextView textView; /**
* Button控件引用
*/
private Button btn; ////////////////////////////////////////////////////////////////////////////////////////////// Data
private int step; public int getStep() {
return step;
} public void setStep(int step) {
this.step = step;
} //////////////////////////////////////////////////////////////////////////////////////////// Construction
public TextViewButton(Context context) {
super(context);
// TODO Auto-generated constructor stub
getControlsRef(context);
} public TextViewButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
getControlsRef(context);
} public TextViewButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
getControlsRef(context);
} /////////////////////////////////////////////////////////////// Business Logic
private void getControlsRef(Context context)
{
// 获取控件引用
View view = LayoutInflater.from(context).inflate(R.layout.textview_btn,null);
btn = (Button)view.findViewById(R.id.btn);
textView = (TextView)view.findViewById(R.id.textView); // 设置监听
setListeners();
} private void setListeners()
{
btn.setOnClickListener(new View.OnClickListener() { // 内部业务逻辑
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
textView.setText(step+"");
} });
}
}

TextViewButton.java

3.使用组合控件
  a).前端声明
  b).获得引用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.example.views.TextViewButton
android:id="@+id/textViewBtn"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.example.views.TextViewButton>
</RelativeLayout>

activity_main.xml

[Android学习笔记]组合控件的使用的更多相关文章

  1. Android学习笔记_11_ListView控件使用

    一.界面设计: 1.activity_main.xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...

  2. android学习笔记七——控件(DatePicker、TimePicker、ProgressBar)

    DatePicker.TimePicker ==> DatePicker,用于选择日期 TimePicker,用于选择时间 两者均派生与FrameLayout,两者在FrameLayout的基础 ...

  3. 十三、Android学习笔记_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  4. Android学习笔记_75_Andorid控件样式汇总

    <!-- 设置activity为透明 --> <style name="translucent"> <item name="android: ...

  5. Android学习笔记_57_ExpandableListView控件应用

    1.布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  6. android 自定义空间 组合控件中 TextView 不支持drawableLeft属性

    android 自定义空间 组合控件中 TextView 不支持drawableLeft属性.会报错Caused by: android.view.InflateException: Binary X ...

  7. android菜鸟学习笔记12----Android控件(一) 几个常用的简单控件

    主要参考<第一行代码> 1.TextView: 功能与传统的桌面应用开发中的Label控件相似,用于显示文本信息 如: <TextView android:layout_width= ...

  8. android 自己定义组合控件

    自己定义控件是一些android程序猿感觉非常难攻破的难点,起码对我来说是这种,可是我们能够在网上找一些好的博客关于自己定义控件好好拿过来学习研究下,多练,多写点也能找到感觉,把一些原理弄懂,今天就讲 ...

  9. Android Studio自定义组合控件

    在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小 ...

随机推荐

  1. swift 自定义TabBarItem

    1.效果图     2.NewsViewController.swift // // NewsViewController.swift // NavigationDemo // // Created ...

  2. Android组件:Fragment切换后保存状态

    之前写的第一篇Fragment实例,和大多数人一开始学的一样,都是通过FragmentTransaction的replace方法来实现,replace方法相当于先移除remove()原来所有已存在的f ...

  3. 集群安装配置Hadoop具体图解

    集群安装配置Hadoop 集群节点:node4.node5.node6.node7.node8. 详细架构: node4 Namenode,secondnamenode,jobtracker node ...

  4. PHP - 图像处理

    第14章 处理图像 学习要点: 1.创建图像 2.简单小案例 在PHP5中,动态图象的处理要比以前容易得多.PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了 ...

  5. 基于visual Studio2013解决C语言竞赛题之1029二元数组平均值

          题目 解决代码及点评 /* 功能:求二维数组中每行元素的平均值,不许引入其它的数组 时间:16:21 2013/10/24 */ #include<stdio ...

  6. javascript iframe 视频解码

    function confirmVdo(){ var videoVal = $(".video_src").val(); if(videoVal){ videoVal = vide ...

  7. getAttribute()获取属性

    Js:getAttribute[转] 一份文档就是一棵节点树. ●节点分为不同的类型:元素节点.属性节点和文本节点等. ●getElementById()方法将返回一个对象,该对象对应着文档里的一个特 ...

  8. [置顶] 浅谈Android的资源编译过程

    Android APK 一.APK的结构以及生成 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Andr ...

  9. uvc摄像头代码解析6

    10.扫描视频设备链和注册视频设备 10.1 uvc视频链 struct uvc_video_chain { //uvc视频链 struct uvc_device *dev; //uvc设备 stru ...

  10. 进阶:案例六: Context Menu(静态 与 动态)

    实现: 1.add: 2.delete 3.add2 实现步骤: 1.新建属性display_text 2.创建layout 3.代码部分: add事件: METHOD onactionadd . D ...