Android自定义控件之组合控件(menubar、imgbtn)

项目开发中,有时候会遇到一个控件是由多个控件一起组成的,这样就可以把所有的控件封装成一个整体来使用,即组合控件。如下:



实现方法:

1、布局文件

<?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="@dimen/lay_menubar_height"
    android:background="@color/light_black" >
    
    <RelativeLayout
        android:layout_width="@dimen/lay_menubar_height"
        android:layout_height="@dimen/lay_menubar_height"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="@dimen/lay_menubar_img_mtop"
        android:layout_marginBottom="@dimen/lay_menubar_img_mtop" >
        
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/selector_mbarback_click"
            android:layout_centerInParent="true"
            android:scaleType="fitCenter"
            android:id="@+id/img_mbar_back"
            android:clickable="true" />
        
    </RelativeLayout> 
    
    <RelativeLayout
        android:layout_width="@dimen/lay_menubar_height"
        android:layout_height="@dimen/lay_menubar_height"
        android:layout_alignParentRight="true"
        android:layout_marginTop="@dimen/lay_menubar_img_mtop"
        android:layout_marginBottom="@dimen/lay_menubar_img_mtop" >
        
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/selector_mbarmore_click"
            android:layout_centerInParent="true"
            android:scaleType="fitCenter"
            android:id="@+id/img_mbar_more"
            android:clickable="true" />
        
    </RelativeLayout> 
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/t_list_devlist"
        android:textColor="@color/white"
        android:layout_centerInParent="true"
        android:textSize="20sp"
        android:id="@+id/tv_mbar_title" />

</RelativeLayout>

2、继承容器类

/**
 * 自定义工具栏
 * 
 * @author xl
 * 
 */
public class CustomMenubar extends RelativeLayout {  

	private final static String TAG = CustomMenubar.class.getSimpleName();
	private Context m_context;
	private ImageView m_imgBack;
	private ImageView m_imgMore;
	private TextView m_tvTitle;

	public CustomMenubar(Context context) {
		super(context);
		m_context = context;
		try {
			init();
		} catch (Exception e) {
			e.printStackTrace();
			MyLogger.e(TAG, e.getMessage());
		}
	}

	public CustomMenubar(Context context, AttributeSet attrs) {
		super(context, attrs);
		m_context = context;
		try {
			init();
		} catch (Exception e) {  
			e.printStackTrace();
			MyLogger.e(TAG, e.getMessage());
		}
	}

	private void init() throws Exception {
		LayoutInflater.from(m_context).inflate(R.layout.lay_menubar, this);
		m_imgBack = (ImageView) findViewById(R.id.img_mbar_back);
		m_imgMore = (ImageView) findViewById(R.id.img_mbar_more);
		m_tvTitle = (TextView) findViewById(R.id.tv_mbar_title);   
	}
	
	public void setBtnBackVisible(boolean visible){
		if(visible){
			m_imgBack.setVisibility(View.VISIBLE);
		}else{
			m_imgBack.setVisibility(View.GONE);
		}
	}
	
	public void setBtnMoreVisible(boolean visible){
		if(visible){
			m_imgMore.setVisibility(View.VISIBLE);
		}else{
			m_imgMore.setVisibility(View.GONE);
		}
	}
	
	public void setBtnBackClickListener(OnClickListener listener){
		m_imgBack.setOnClickListener(listener);
	}
	
	public void setBtnMoreClickListener(OnClickListener listener){
		m_imgMore.setOnClickListener(listener);
	}
	
	public void setTitle(int resid){
		m_tvTitle.setText(resid);
	}
	
	public void setTitle(String title){
		m_tvTitle.setText(title);
	}
	
	public void setBtnMoreImgSrc(int resid){
		m_imgMore.setImageResource(resid);
	}

}

3、使用

布局文件

<com.app.view.CustomMenubar
        android:id="@+id/mbar_listaty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
mMenubar = (CustomMenubar) this.findViewById(R.id.mbar_atyfrag);
完!!!


猜你喜欢

转载自blog.csdn.net/xialong_927/article/details/79878995