DrawerLayout的使用 側滑加載Listview,首頁使用Fragment和處理點擊觸摸衝突、穿透事件和監聽菜單滑動狀態的改變的詳細介紹

DrawerLayout是谷歌提供實現側滑效果的一個佈局 不是控件或者封裝類
嚴格來說DrawerLayout是通過覆蓋Acitivyt來實現的側滑效果
使用起來非常簡單 不需要做適配器加權限等操作 重點在佈局裏 只需要在佈局文件里布置就可以了
1.DrawerLayout佈局首頁要用Fragment 谷歌推薦
2.並且在一定要在要側滑的控件里加android:layout_gravity=”xxx”的屬性 這樣纔會被識別是一個側滑效果的控件
我實現的是左邊有個是個ListView側滑菜單 右邊也是個ListView側滑菜單 左邊的Listview做了兩個點擊事件:
1.點擊之後本側滑菜單關閉
2.點擊之後開啓右邊的側滑菜單 當然 右邊的側滑菜單業可以手動側滑出來 主要做的是告訴大家有這兩個方法
監聽方法在listview的監聽裏

下面是DrawerLayout的佈局代碼:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="a16.erin.unit03_drawerlayout.MainActivity">

   <FrameLayout
       android:id="@+id/mycontent"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       />
    <ListView
        android:id="@+id/menu_list"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        //一定要加這一步 可以理解爲設置側滑的位置
        android:layout_gravity="start"
        android:background="#fff"
        />
    <ListView
        android:id="@+id/menu_listright"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:background="#fff"
        />
</android.support.v4.widget.DrawerLayout>

這是listviewitem的佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
<ImageView
    android:id="@+id/my_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher"
    />
    <TextView
        android:id="@+id/my_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        />
</LinearLayout>

具體代碼如下:

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ListView listView2;
    private DrawerLayout drawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //顯示的側滑菜單佈局;
        listView = (ListView) findViewById(R.id.menu_list);
        listView2 = (ListView) findViewById(R.id.menu_listright);
        //根佈局,側拉菜單
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        //主界面添加fragment;
        getSupportFragmentManager().beginTransaction().replace(R.id.mycontent, new MainFragment()).commit();
        list = Arrays.asList(new String[]{"好友動態", "我的話題", "收藏", "活動"});
        listView.setAdapter(new MyAdapter());
        listView2.setAdapter(new MyAdapter());
        //監聽菜單滑動狀態的改變;
    drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
   //正在滑出的監聽方法;slideOffset代表菜單滑出的比例,全部滑出時爲1;,全部滑動消失,爲0;
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {

            System.out.println("onDrawerSlide=="+slideOffset);
        }

        @Override//菜單徹底打開(滑出)的監方法
        public void onDrawerOpened(View drawerView) {
            //時常會有側滑出來頁面之後 點擊頁面 而首頁的控件也會受到點擊反應
            //解決點擊事件穿透衝突;設置爲true就可以了
            drawerView.setClickable(true);     

        }

        @Override//全部滑出屏幕的監聽方法
        public void onDrawerClosed(View drawerView) {    

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
        //點擊listview關閉當前側滑頁面或者開啓另一個側滑頁面
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this,"ttttttt",Toast.LENGTH_LONG).show();
                //點擊菜單條目,關閉當前側滑菜單;參數爲菜單顯示的view;
                drawerLayout.closeDrawer(listView);
                //打開側滑菜單的方法;
                drawerLayout.openDrawer(listView2);
            }
        });

    }

    List<String> list;

    class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = View.inflate(MainActivity.this, R.layout.item, null);
            TextView textView = (TextView) convertView.findViewById(R.id.my_text);
            textView.setText(list.get(position));
            return convertView;
        }
    }

}

左邊的listview側滑菜單

右邊的listview側滑菜單 也可以通過右邊的側滑菜單點擊出現 點擊放在在上面listview的點擊事件裏有寫到

好了 以上是個人對DrawerLayout的理解 分享完畢 希望能幫助到大家!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章