组合控件的使用
开发过程中,多个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>
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+""); } }); } }
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>