转载请注明:
http://blog.csdn.net/zenmela2011/article/details/42461229
所谓组合控件,就是把android自带的一些控件组合起来,拼成我们自己需要的一个控件。
本文中我们把ImageView和TextView组合起来,拼装在水平的LinearLayout中,一般的ListView中常见这种布局,效果图如下:
自定义组合控件的步骤:
首先,新建一个布局文件,把组合控件内部的结构整理出来,myview_layout.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="TextView" />
</LinearLayout>
在这个布局中,实现了左侧图片,右侧文字的结构。利用这个布局就可以创建控件了。
第二步,新建MyView类,继承LinearLayout,导入 myview_layout.xml布局,并且设置相应的方法,这样 ,这个自定义组合控件的属性在代码中就可以进行设置了。MyView.class代码如下:
package com.fang.androidtest;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* 创建组合控件
*
* @author fangfang
*
*/
public class MyView extends LinearLayout {
private ImageView mImage;//左侧的图片
private TextView mText;//右侧的文字
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
//导入布局文件
LayoutInflater.from(context).inflate(R.layout.myview_layout, this);
mImage=(ImageView) findViewById(R.id.iv_image);
mText=(TextView) findViewById(R.id.tv_text);
}
/**
* 设置图片资源
*
* @param resourceId 图片ID
*/
public void setImageResource(int resourceId){
mImage.setImageResource(resourceId);
}
/**
* 设置文字
*
* @param text 需要显示的文字
*/
public void setText(String text){
mText.setText(text);
}
}
第三步,在需要改控件的xml布局中直接使用即可。main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.fang.androidtest.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
</RelativeLayout>
最后,在代码中设置该控件的属性。MainActivity.class代码如下:
package com.fang.androidtest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
/**
*
* @author fangfang
*
*/
public class MainActivity extends Activity{
private MyView myView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
myView=(MyView)findViewById(R.id.myview);
//设置组合控件的属性
myView.setImageResource(R.drawable.man);
myView.setText("人物设置");
}
}
这样,这个组合控件就彻底完成了。效果如下:
其实在自定义控件中,组合自定义控件应该是最简单的了。一共4步,我们可以举一反三,组合出任何我们需要的控件来。
完整代码下载:
http://download.csdn.net/detail/zenmela2011/8333299