Android为自定义控件添加事件

1)文章简介

创建自定义控件并为它添加一个自定义事件

当用户单击自定义控件中的“测试”按钮时触发按钮自定义事件

2)定义一个layout(activity_custom.xml)作为自定义控件的布局代码如下

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

3)接下来写一个类(CustomUserControl.java)继承LinearLayout,导入刚刚的布局,添加自定义事件并通过单击“测试按钮”触发自定义事件

 

 

package com.example.androidtest2;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class CustomUserControl extends LinearLayout{
	
	/*定义接口*/
	public interface IMyClick{
		public void onMyClick(String str);
	}
	/*初始化接口变量*/
	IMyClick iMyClick=null;
	/*自定义事件*/
	public void setOnMyClickListener(IMyClick _iMyClick){
		iMyClick=_iMyClick;
	}
	private Button button1=null;
	private EditText editText1=null;
	public CustomUserControl(Context context){
		super(context);
	}
	public CustomUserControl(Context context, AttributeSet attr){
		super(context, attr);
		LayoutInflater layoutInflater=
				(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		layoutInflater.inflate(R.layout.activity_custom, this);
		editText1=(EditText)findViewById(R.id.editText1);
		/*设置按钮的点击事件*/
		button1=(Button)findViewById(R.id.button1);
		button1.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/*使用回调实现返回editText1内容*/
				iMyClick.onMyClick(editText1.getText().toString());
			}
		});
	}
	/*为Button按钮添加内容*/
	public void setButtonText(String text){
		button1.setText(text);
	}
	
}

4)前台(activity_main.xml)调用自定义控件代码如下

 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.example.androidtest2.CustomUserControl
        android:id="@+id/customUserControl1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </com.example.androidtest2.CustomUserControl>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

4)后台(MainActivity.java)触发自定义事件代码如下

 

 

package com.example.androidtest2;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

	private CustomUserControl customUserControl1=null; 
	private TextView textView1=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView1=(TextView)findViewById(R.id.textView1);
        customUserControl1=(CustomUserControl)findViewById(R.id.customUserControl1);
        customUserControl1.setButtonText("测试");
        customUserControl1.setOnMyClickListener(new CustomUserControl.IMyClick() {
			
			@Override
			public void onMyClick(String str) {
				textView1.setText(str);
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}
posted @ 2016-03-15 09:18  代码缔造的帝国  阅读(217)  评论(0编辑  收藏  举报