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;
}
}
}
好了 以上是個人對DrawerLayout的理解 分享完畢 希望能幫助到大家!!!