Andorid之自定义控件 ①

版权声明:本文为博主原创文章,未经博主允许不的转载。谢谢! https://blog.csdn.net/niu9799/article/details/81068092

Andorid之自定义控件 ①

首先说下自定义控件的一般步骤。

第一步,创建View

第二步,处理View布局

第三步,绘制view

第四步,响应事件

第五步,优化控件

-------------------------------------------------------------

首先说下自定义控件的几种方式:

自定义控件的三种方式


第一种方式, 继承控件(继承已有的控件)

  当要实现的控件和已有的控件在很多方面比较类似, 通过对已有控件的扩展来满足要求。

第二种方式,组合控件(继承一个布局文件)

  一般用于自定义组合控件,在构造函数中通过inflater和addView()方法加载自定义控件的布局文件形成图形界面(不需要onDraw方法)。

第三种方式,自绘控件(继承view)

  通过onDraw方法来绘制出控件界面。详情参看:自定义控件之自绘控件

首先我们说下组合控件。

组合控件

组合控件非常常见如下图:这是一个非常常见也非常简单组合控件

组合控件来说想对比较简单,一般都是在原生控件的基础上进行组合形成一个新的控件,新控件包含原控件功能及属性。

就简单说下上面这个组合控件

首先,创建自定义控件的布局文件

如:title_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="45px"
    android:background="#00000000" >

    <ImageButton
        android:id="@+id/ib_title_back"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@null"
        android:paddingLeft="35px"
        android:src="@drawable/back_on" />

    <TextView
        android:textSize="22sp"
        android:id="@+id/tv_title_title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="" />

</RelativeLayout>

 创建一个类TitleView,继承自RelativeLayout,声明构造以及必要的方法如设置Title...

代码如下:

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class TitleView extends RelativeLayout{
	//返回按键
	private ImageButton mIb_title_back;
	//Title
	private TextView mTv_title_title;

	public TitleView(Context context, AttributeSet attrs) {
		super(context, attrs);
		LayoutInflater.from(context).inflate(R.layout.title_bar,this);
		mIb_title_back = (ImageButton) findViewById(R.id.ib_title_back);
		mTv_title_title = (TextView) findViewById(R.id.tv_title_title);
	}
	public void setTitleText(String title){
		mTv_title_title.setText(title);
	}
	public void setTitleImageButtonListener(OnClickListener listener){
		mIb_title_back.setOnClickListener(listener);
		
	}
}

至此准备工作算是做完了,接下来就是如何使用这个控件了。

第一步,在布局文件中引用自定义控件

如:

       <com.bd.szxgtest.TitleView
           android:id="@+id/tv_title_bar"
           android:layout_height="wrap_content"
           android:layout_width="match_parent"
           ></com.bd.szxgtest.TitleView>

第二步就是代码

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {
	private TitleView mtv_title_bar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mtv_title_bar = (TitleView) findViewById(R.id.tv_title_bar);
		mtv_title_bar.setTitleText("这是第一个界面");
		mtv_title_bar.setTitleImageButtonListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
			}

		});
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

猜你喜欢

转载自blog.csdn.net/niu9799/article/details/81068092