Android创建组合控件(摘自《Android5.0开发范例代码大全》)

一、问题

需要通过组合现有的元素来创建自定义的小部件。

二、解决方案

通过扩展通用的ViewGroup并添加所需的功能就能创建自定义的小部件。创建自定义小部件或可重用用户界面元素的最简单、实用的方法就是利用Android SDK提供的现有小部件来创建组合控件。

三、实现机制

ViewGroup及子类LinearLayout、RelativeLayout等能帮助摆放控件的位置,这样可以专注于添加所需的功能。

四、实用案例

含有图片或文字的按钮

public class TextImageButton extends FrameLayout{  
	private ImageView iv;
	private TextView tv;
	public TextImageButton(Context context){  
		this(context,null);  
	}
	public TextImageButton(Context context,AttributeSet attrs){  
		this(context,attrs,0);  
	}  
	public TextImageButton(Context context,AttributeSet attrs,int defaultStyle){  
		//通过系统的按钮样式初始化父布局  
		//这样会设置clickable属性和按钮背景来匹配当前的主题  
		super(context,attrs,android.R.attr.buttonStyle);  
		iv=new ImageView(context,attrs,defaultStyle);  
		tv=new TextView(context,attrs,defaultStyle);  
		FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTEXT,LayoutParams.WRAP_CONTEXT,Gravity.CENTER);  
		this.addView(iv,params);  
		this.addView(tv,params);  
		//如有图片,切换到图片模式  
		if(iv.getDrawable()!=null){  
			tv.setVisibility(View.GONE);  
			iv.setVisibility(View.VISIBLE);
		}else{ 
			tv.setVisibility(View.VISIBLE);  
			iv.setVisibility(View.GONE);  
		}  
	}  

	public void setText(CharSequence text){  
		tv.setVisibility(View.VISIBLE);  
		iv.setVisiblity(View.GONE);  
		tv.setText(text);  
  	}
	public void setImageResource(int resId){
		tv.setVisibility(View.GONE);  
		iv.setVisibility(View.VISIBLE);  
		iv.setImageResource(resId);
	}
	public void setImageDrawable(Drawable drawable){  
		tv.setVisibility(View.GONE);  
		iv.setVisibility(View.VISIBLE);  
		iv.setImageDrawable(drawable);  
	}   
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值