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);
}
}
}