DrawerLayout的使用 侧滑加载Listview,首页使用Fragment和处理点击触摸冲突、穿透事件和监听菜单滑动状态的改变的详细介绍

xiaoxiao2021-02-28  122

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的理解 分享完毕 希望能帮助到大家!!!

转载请注明原文地址: https://www.6miu.com/read-39832.html

最新回复(0)