• 40、DrawerLayout使用详情


    1、主内容视图一定要是DrawerLayout的第一个子视图
    2、主内容视图宽度和高度匹配父视图,即“match_parent”
    3、必须显示指定抽屉视图(如ListView)的 android:layout_gravity 属性
        1)、 android:layout_gravity=“start”时,从左向右滑出菜单
        2)、 android:layout_gravity=“end” 时,从右向左滑出菜单
        3)、不推荐使用 “left”和“right”
    4、抽屉视图的宽度以dp为单位,请不要超过320dp(为了总能看到一些主内容视图。

    【知识点】

    1、mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener);

    2、ActionBarDrawerToggle是DrawerLayout.DrawerListener的具体实现类

        1)、改变android.R.id.home图标(构造方法)

        2)、Drawer拉出、隐藏,带有android.R.id.home动画效果(syncState())

        3)、监听Drawer拉出、隐藏事件

    3、覆写ActionBarDrawerToggle的onDrawerOpened()onDrawerClosed()以监 听抽屉拉出或隐藏事件

    4、覆写Activity的onPostCreate()和onConfigurationChanged()方法

    【范例】

    activity_main.xml

     1 <android.support.v4.widget.DrawerLayout 
     2     xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:id="@+id/drawer_layout"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent" >
     6 
     7     <!-- The main content view -->
     8     <FrameLayout
     9         android:id="@+id/content_frame"
    10         android:layout_width="match_parent"
    11         android:layout_height="match_parent" />
    12 
    13     <!-- The navigation view -->
    14     <ListView
    15         android:id="@+id/left_drawer"
    16         android:layout_width="240dp"
    17         android:layout_height="match_parent"
    18         android:layout_gravity="start"
    19         android:background="#ffffcc"
    20         android:choiceMode="singleChoice"
    21         android:divider="@android:color/transparent"
    22         android:dividerHeight="0dp" />
    23 
    24 </android.support.v4.widget.DrawerLayout>

    MainActivity.java

      1 public class MainActivity extends Activity implements OnItemClickListener {
      2 
      3     private DrawerLayout mDrawerLayout;
      4     private ListView mDrawerList;
      5     private ArrayList<String> menuLists;
      6     private ArrayAdapter<String> adapter;
      7     private ActionBarDrawerToggle mDrawerToggle;
      8     private String mTitle;
      9 
     10     @Override
     11     protected void onCreate(Bundle savedInstanceState) {
     12         super.onCreate(savedInstanceState);
     13         setContentView(R.layout.activity_main);
     14 
     15         mTitle = (String) getTitle();
     16 
     17         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
     18         mDrawerList = (ListView) findViewById(R.id.left_drawer);
     19         menuLists = new ArrayList<String>();
     20         for (int i = 0; i < 5; i++)
     21             menuLists.add("Android开发0" + i);
     22         adapter = new ArrayAdapter<String>(this,
     23                 android.R.layout.simple_list_item_1, menuLists);
     24         mDrawerList.setAdapter(adapter);
     25         mDrawerList.setOnItemClickListener(this);
     26 
     27         mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
     28                 R.drawable.ic_drawer, R.string.drawer_open,
     29                 R.string.drawer_close) {
     30             @Override
     31             public void onDrawerOpened(View drawerView) {
     32                 super.onDrawerOpened(drawerView);
     33                 getActionBar().setTitle("请选择");
     34                 invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
     35             }
     37             @Override
     38             public void onDrawerClosed(View drawerView) {
     39                 super.onDrawerClosed(drawerView);
     40                 getActionBar().setTitle(mTitle);
     41                 invalidateOptionsMenu();
     42             }
     43         };
     44         mDrawerLayout.setDrawerListener(mDrawerToggle);
     45         
     46         //开启ActionBar上APP ICON的功能
     47         getActionBar().setDisplayHomeAsUpEnabled(true);
     48         getActionBar().setHomeButtonEnabled(true);
     50     }
     51 
     52     @Override
     53     public boolean onPrepareOptionsMenu(Menu menu) {
     54         boolean isDrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
     55         menu.findItem(R.id.action_websearch).setVisible(!isDrawerOpen);
     56         return super.onPrepareOptionsMenu(menu);
     57     }
     58 
     59     @Override
     60     public boolean onCreateOptionsMenu(Menu menu) {
     61         // Inflate the menu; this adds items to the action bar if it is present.
     62         getMenuInflater().inflate(R.menu.main, menu);
     63         return true;
     64     }
     65 
     66     @Override
     67     public boolean onOptionsItemSelected(MenuItem item) {
     68         //将ActionBar上的图标与Drawer结合起来
     69         if (mDrawerToggle.onOptionsItemSelected(item)){
     70             return true;
     71         }
     72         switch (item.getItemId()) {
     73         case R.id.action_websearch:
     74             Intent intent = new Intent();
     75             intent.setAction("android.intent.action.VIEW");
     76             Uri uri = Uri.parse("http://www.cnblogs.com/androidsj");
     77             intent.setData(uri);
     78             startActivity(intent);
     79             break;
     80         }
     81         return super.onOptionsItemSelected(item);
     82     }
     83     
     84     @Override
     85     protected void onPostCreate(Bundle savedInstanceState) {
     86         super.onPostCreate(savedInstanceState);
     87         //需要将ActionDrawerToggle与DrawerLayout的状态同步
     88         //将ActionBarDrawerToggle中的drawer图标,设置为ActionBar中的Home-Button的Icon
     89         mDrawerToggle.syncState();
     90     }
     91     
     92     @Override
     93     public void onConfigurationChanged(Configuration newConfig) {
     94         super.onConfigurationChanged(newConfig);
     95         mDrawerToggle.onConfigurationChanged(newConfig);
     96     }
     97     
     98     @Override
     99     public void onItemClick(AdapterView<?> arg0, View arg1, int position,
    100             long arg3) {
    101         // 动态插入一个Fragment到FrameLayout当中
    102         Fragment contentFragment = new ContentFragment();
    103         Bundle args = new Bundle();
    104         args.putString("text", menuLists.get(position));
    105         contentFragment.setArguments(args);
    106 
    107         FragmentManager fm = getFragmentManager();
    108         fm.beginTransaction().replace(R.id.content_frame, contentFragment)
    109                 .commit();
    110 
    111         mDrawerLayout.closeDrawer(mDrawerList);
    112     }
    113 
    114 }

    ContentFragment.java

     1 public class ContentFragment extends Fragment {
     2     private TextView textView;
     3     @Override
     4     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     5             Bundle savedInstanceState) {
     6         View view = inflater.inflate(R.layout.fragment_content, container, false);
     7         textView = (TextView) view.findViewById(R.id.textView);
     8         
     9         String text = getArguments().getString("text");
    10         textView.setText(text);
    11         
    12         return view;
    13     }
    14 }
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout 
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     android:orientation="vertical" >
     7     <TextView
     8         android:id="@+id/textView"
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:textSize="25sp" />
    12 </LinearLayout>

  • 相关阅读:
    通配符^与not like 区别
    SQL语句
    身份证的性别验证(摘抄)
    基于VirtualBox虚拟机安装Ubuntu教程
    VMware手动添加centos7硬盘图文操作及分区超详细
    acl权限命令
    linux查看分区是否开启acl权限
    CentOS7上Docker简单安装及nginx部署
    Docker安装ngnix使用ping报错
    centos7安装mysql5.6
  • 原文地址:https://www.cnblogs.com/androidsj/p/4633304.html
Copyright © 2020-2023  润新知