Android创建组合控件
该类的逻辑效果为:
这是一个TextView与ImageView的集合,如果该控件用户指定了图片,那么就把该控件当成ImageView来用,如果没有指定图片资源,那么就当成TextView来用。。。
1、定义一个类(ImageTextButton)继承于FrameLayout
public class ImageTextButton extends FrameLayout
2、在该类中把需要的控件给声明出来
private ImageView mImageView;
private TextView mTextView;
3、实现该构造方法
public ImageTextButton(Context context) {
this(context, null);
}
public ImageTextButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ImageTextButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, android.R.attr.buttonStyle);
}
构造函数有三个,分别对应于不同的创建方式。(看清楚每个构造的调用方式)
4、在第三个构造函数中,进行我们的代码逻辑控制
mImageView = new ImageView(context, attrs, defStyleAttr);
mTextView = new TextView(context, attrs, defStyleAttr);
在创建的时候,把那几个参数丢进行可以使用我们在XML中原有的属性,从而不需要我们自己进行声明// 创建视图的布局对其方式
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER);
addView(mImageView, params);
addView(mTextView, params);
这块代码就不解释了, 不懂的可Google/**
* 两种模式来回切换
*/
if (mImageView.getDrawable() == null) {
mImageView.setVisibility(View.GONE);
mTextView.setVisibility(View.VISIBLE);
} else {
mImageView.setVisibility(View.VISIBLE);
mTextView.setVisibility(View.GONE);
}
public class ImageTextButton extends FrameLayout {
private ImageView mImageView;
private TextView mTextView;
public ImageTextButton(Context context) {
this(context, null);
}
public ImageTextButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ImageTextButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, android.R.attr.buttonStyle);
/**
* 初始化数据
*/
mImageView = new ImageView(context, attrs, defStyleAttr);
mTextView = new TextView(context, attrs, defStyleAttr);
// 创建视图的布局对其方式
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER);
addView(mImageView, params);
addView(mTextView, params);
/**
* 两种模式来回切换
*/
if (mImageView.getDrawable() == null) {
mImageView.setVisibility(View.GONE);
mTextView.setVisibility(View.VISIBLE);
} else {
mImageView.setVisibility(View.VISIBLE);
mTextView.setVisibility(View.GONE);
}
}
}