代码改变世界

[Android学习笔记]组合控件的使用

2014-04-14 14:00  hellenism  阅读(197)  评论(0编辑  收藏  举报

组合控件的使用

开发过程中,多个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