Android 自訂群組合控制項 簡單導覽列

來源:互聯網
上載者:User

標籤:

最近在做項目的過程中,發現項目中好多介面的導覽列都很類似或者一樣,但是每次都要重複寫同樣的代碼,覺得很不爽,所以就簡單地自訂了一下瀏覽列控制項.
先:

導覽列包括:

  • 返回按鈕
  • 標題
  • 右側按鈕(功能不確定)

首先是布局檔案,如下:



<?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 自訂群組合控制項 簡單導覽列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.