【问题标题】:How to open the navigation drawer when button clicks ? without using action bar in android单击按钮时如何打开导航抽屉?在android中不使用操作栏
【发布时间】:2016-04-11 09:10:59
【问题描述】:

我正在尝试在不使用操作栏和工具栏的情况下开发自定义导航抽屉,当用户单击按钮时,导航将打开。如果您有任何示例,请分享

【问题讨论】:

  • 请分享你制作的代码?
  • 我不知道导航抽屉.. @AlokGupta

标签: android android-activity fragment navigation-drawer android-fragmentactivity


【解决方案1】:

使用DrawerLayout

mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);

//To Open:
mDrawerLayout.openDrawer(Gravity.START);

//To Close:
mDrawerLayout.closeDrawer(Gravity.END);

【讨论】:

    【解决方案2】:

    你可以使用drawerLayout.openDrawer(GravityCompat.START);

    实施

    在你的活动中

    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    
    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                drawerLayout.openDrawer(GravityCompat.START);
            }
        });
    

    导航视图的XML(应该在Drawerlayout里面)

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/white"
        android:fitsSystemWindows="true"
        android:overScrollMode="always"
        app:headerLayout="@layout/drawer_header"
        app:itemBackground="@@android:color/white"
        app:itemIconTint="@color/app_primary"
        app:itemTextColor="@color/app_primary"
        app:menu="@menu/drawer_menu">
    

    【讨论】:

      【解决方案3】:

      如果您使用支持库中的DrawerLayout,您将获得opneDrawer() 方法:

      请参阅文档:https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html

      【讨论】:

        【解决方案4】:

        这是一个例子

        创建一个Fragment是NavigationDrawerFragment.class

        public class NavigationDrawerFragment extends Fragment {
        private ActionBarDrawerToggle mDrawerToggle;
        private DrawerLayout mDrawerLayout;
        private int mFragmentId;
        private View mFragmentContainerView;
        
        public interface EventDrawerListener {
            void someEvent(String s);
        }
        
        private EventDrawerListener mEventDrawerListener;
        
        
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.slide_menu, container, false);
        
            return v;
        }
        public void setUp(int fragmentID, DrawerLayout drawerLayout, EventDrawerListener eventDrawerListener) {
            this.mFragmentId = fragmentID;
            this.mEventDrawerListener = eventDrawerListener;
            mFragmentContainerView = getActivity().findViewById(mFragmentId);
            mDrawerLayout = drawerLayout;
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(false);
            actionBar.setHomeButtonEnabled(true);
            mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, R.string.open, R.string.close) {
                @Override
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    getActivity().invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        
                }
        
                @Override
                public void onDrawerClosed(View drawerView) {
                    super.onDrawerClosed(drawerView);
                    getActivity().invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                }
        
        
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);
        
        }
        
        private ActionBar getActionBar() {
            return ((AppCompatActivity) getActivity()).getSupportActionBar();
        }
        
        }
        

        在activity_main.xml中

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/layout_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
            <android.support.v4.widget.DrawerLayout
                android:id="@+id/drawer_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <include layout="@layout/toolbar" />
                <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Content Your Main"/>
                </RelativeLayout>
                <fragment
                    android:id="@+id/navigation_drawer"
                    android:name="your.package.NavigationDrawerFragment"
                    android:layout_width="@dimen/width_menu"
                    android:layout_height="match_parent"
                    android:layout_gravity="start"
                    android:splitMotionEvents="false"
                    tools:layout="@layout/slide_menu" />
            </android.support.v4.widget.DrawerLayout>
        

        在 MainActivity.class 中

        public class MainActivity extends Activity{
        
        
        private NavigationDrawerFragment mNavigationDrawerFragment;
        private DrawerLayout mDrawerLayout;
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setUpDrawer();
            ImageView image=(ImageView) findViewById(R.id.image_home);
                image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                        mDrawerLayout.closeDrawer(Gravity.LEFT);
                    } else {
                        mDrawerLayout.openDrawer(Gravity.LEFT);
                    }
                }
            });
        }
        
        private void setUpDrawer() {
            mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
            mNavigationDrawerFragment.setUp(R.id.relative_category, (DrawerLayout) findViewById(R.id.drawer_layout), this);
            mDrawerLayout.setScrimColor(getResources().getColor(android.R.color.transparent));
        
        }
        }
        

        工具栏.xml

        <?xml version="1.0" encoding="utf-8"?>
        <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_alignParentTop="true"
        android:background="@color/color_bg_splash"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark">
        
        <ImageView
            android:id="@+id/image_home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center_vertical"
            android:gravity="center"
            android:paddingBottom="@dimen/padding16dp"
            android:paddingRight="@dimen/padding16dp"
            android:paddingTop="@dimen/padding16dp"
            android:src="@drawable/icon_menu" />
          </android.support.v7.widget.Toolbar>
        

        希望对你有帮助!!!

        【讨论】:

          【解决方案5】:

          你在我的工具栏下面设置了 DrawerLayout。

          <?xml version="1.0" encoding="utf-8"?>
          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/layout_main"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
           <include layout="@layout/toolbar" />
           <android.support.v4.widget.DrawerLayout
              android:id="@+id/drawer_layout"
              android:layout_width="match_parent"
              android:layout_below="@+id/toolbar"
              android:layout_height="match_parent">
          
              <RelativeLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
              <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="Content Your Main"/>
              </RelativeLayout>
           </android.support.v4.widget.DrawerLayout>
          

          【讨论】:

          • 我正在尝试开发没有操作栏和工具栏的导航抽屉@Nguyen Trung Hieu
          • 您在我的工具栏下方设置了 DrawerLayout。没有操作栏和工具栏的导航抽屉
          【解决方案6】:

          只需一个简单的按钮或任何附加了点击监听器的视图,您就可以使用下面的代码 sn-p:

           if(bi.drawerLayout.isDrawerOpen(Gravity.LEFT)){
               bi.drawerLayout.closeDrawer(Gravity.LEFT);
           }else{
               bi.drawerLayout.openDrawer(Gravity.LEFT);
           } 
               
          

          【讨论】:

            【解决方案7】:

            您需要像这样使用“DrawerToggle”

            //initialisation left drawer
                mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                        mToolbar, R.string.app_name, R.string.app_name) {
            
                    /** Called when a drawer has settled in a completely closed state. */
                    public void onDrawerClosed(View view) {
                        super.onDrawerClosed(view);
            
                        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            
                        //syncState();
                    }
            
                    /** Called when a drawer has settled in a completely open state. */
                    public void onDrawerOpened(View drawerView) {
                        super.onDrawerOpened(drawerView);
                        //getSupportActionBar().setTitle(mDrawerTitle);
                        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
                        //syncState();
                    }
            
                    @Override
                    public void onDrawerSlide(View drawerView, float slideOffset) {
                        super.onDrawerSlide(drawerView, slideOffset);
                    }
                };
            
                // Set the drawer toggle as the DrawerListener
                mDrawerLayout.setDrawerListener(mDrawerToggle);
                mDrawerToggle.syncState();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-20
              • 1970-01-01
              • 1970-01-01
              • 2013-10-26
              相关资源
              最近更新 更多