项目开发中,有时候会遇到一个控件是由多个控件一起组成的,这样就可以把所有的控件封装成一个整体来使用,即组合控件。如下:
实现方法:
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);完!!!