標籤:
最近在做項目的過程中,發現項目中好多介面的導覽列都很類似或者一樣,但是每次都要重複寫同樣的代碼,覺得很不爽,所以就簡單地自訂了一下瀏覽列控制項.
先:
導覽列包括:
首先是布局檔案,如下:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/rl_chat_title"android:layout_width="match_parent"android:layout_height="50dp"android:background="@drawable/land_navigation"android:layout_alignParentTop="true"> <ImageView android:id="@+id/iv_nav_back" android:layout_width="50dp" android:layout_height="50dp" android:padding="13dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:src="@drawable/icon_back"/> <TextView android:id="@+id/tv_nav_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/app_name"/> <ImageView android:id="@+id/iv_nav_right" android:layout_width="50dp" android:layout_height="50dp" android:padding="13dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@drawable/icon_setting1"/></RelativeLayout>
布局包含兩個ImageView和一個TextView.
然後自訂類NavigationView繼承RelativeLayout並實現OnClickListener介面.
/** * 導覽列組件,目前包括返回鍵,標題,右側按鈕.其中: * </br>返回鍵已經實現按鍵監聽 * </br>右側按鈕已實現按鍵監聽 * </br>標題預設不可點擊 * @author Asia * */public class NavigationView extends RelativeLayout implements OnClickListener{ public NavigationView(Context context){ this(context, null); } private ImageView backView; private TextView titleView; private ImageView rightView; public NavigationView(Context context, AttributeSet attrs) { super(context, attrs); View view = LayoutInflater.from(context).inflate(R.layout.navigation_view, this, true); backView = (ImageView) view.findViewById(R.id.iv_nav_back); backView.setOnClickListener(this); titleView = (TextView) view.findViewById(R.id.tv_nav_title); rightView = (ImageView) view.findViewById(R.id.iv_nav_right); rightView.setOnClickListener(this); } /** * 擷取返回按鈕 * @return */ public ImageView getBackView() { return backView; } /** * 擷取標題控制項 * @return */ public TextView getTitleView() { return titleView; } /** * 設定標題 * @param title */ public void setTitle(String title){ titleView.setText(title); } /** * 擷取右側按鈕,預設不顯示 * @return */ public ImageView getRightView() { return rightView; } private ClickCallback callback; /** * 設定按鈕點擊回調介面 * @param callback */ public void setClickCallback(ClickCallback callback) { this.callback = callback; } /** * 導覽列點擊回調介面 * </br>如若需要標題可點擊,可再添加 * @author Asia * */ public static interface ClickCallback{ /** * 點擊返回按鈕回調 */ void onBackClick(); void onRightClick(); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.iv_nav_back) { callback.onBackClick(); return; } if (id == R.id.iv_nav_right) { callback.onRightClick(); return; } }}
NavigationView中包含一個回調介面,在使用時設定一個此介面即可.
/** * 導覽列點擊回調介面 * </br>如若需要標題可點擊,可再添加 * @author Asia * */public static interface ClickCallback{ /** * 點擊返回按鈕回調 */ void onBackClick(); void onRightClick();}
如何使用呢?下面實際使用的過程.
主介面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.asi.customview.view.NavigationView android:id="@+id/nav_main" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /></LinearLayout>
主介面Java代碼
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); } private NavigationView navigationView; private void initView() { navigationView = (NavigationView) super.findViewById(R.id.nav_main); navigationView.setTitle("Title"); navigationView.setClickCallback(new ClickCallback() { @Override public void onRightClick() { DLog.d("點擊了右側按鈕!"); ToastUtil.showShort(MainActivity.this, "點擊了右側按鈕!"); } @Override public void onBackClick() { DLog.d("點擊了返回按鈕!"); ToastUtil.showShort(MainActivity.this, "點擊了返回按鈕!"); finish(); } }); }}
Android 自訂群組合控制項 簡單導覽列