如何以编程方式setLockDrawerMode

时间:2014-11-21 03:30:47

标签: android navigation-drawer slidingdrawer drawerlayout drawertoggle

我创建了一个切换抽屉,当用户点击内容视图中显示的项目时,抽屉将自动从右侧滑动。但是,此时,可以手动切换抽屉( 用户可以通过从屏幕边缘滑动来滑动打开抽屉 )以及用户打开的抽屉用户单击显示的项目时自动进行。因此,我已将以下代码行实现为 mDrawer.setDrawerLockMode(1, GravityCompat.END); ,其中“1”定义为:


  

public static final int LOCK_MODE_LOCKED_CLOSED

     

抽屉锁定关闭。用户可能无法打开它,但应用程序可能会以编程方式打开它。

     

常数值:1(0x00000001)


但是,在调试时,结果是用户仍然可以手动切换打开抽屉,并且在单击项目时仍可以自动切换抽屉。

实际上所需的切换结果是,只有在选择项目时才能切换抽屉,而不是为用户提供手动切换抽屉的权限。

因此,有谁可以帮助看看有什么不对或提供一些建设性的建议?

我已附上以下代码供您阅读:

mDrawerToggle = new CustomActionBarDrawerToggle(getActivity(), mDrawer);
mDrawer.openDrawer(GravityCompat.END);
mDrawer.setDrawerListener(mDrawerToggle);
//To lock the drawer from being manually toggled
mDrawer.setDrawerLockMode(1, GravityCompat.END);

1 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

首先调用抽屉的布局:

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

之后设置锁定模式如下:

mDrawerLayout.setDrawerLockMode(mDrawerLayout.LOCK_MODE_LOCKED_CLOSED);
getActionBar().setHomeButtonEnabled(false); // This for the App Icon 

然后,如果您想再次解锁抽屉:

   mDrawerLayout.setDrawerLockMode(mDrawerLayout.LOCK_MODE_UNLOCKED); // It is unlocked but it is not shown.

mDrawerLayout.setDrawerLockMode(mDrawerLayout.LOCK_MODE_LOCKED_OPEN); // To Show the drawer opened but it will stay open.

看看这对你有帮助。 :)

编辑2:

现在我明白了:

声明抽屉布局和抽屉列表视图:

mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList = (ListView)findViewById(R.id.list_slidermenu);

在您的按钮/项目监听器上执行以下操作:

   yourButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            mDrawerLayout.openDrawer(mDrawerList); // This will open the button on click of the item

        }
    });

对于Unlock的合理性,我只是展示了你想要再次打开抽屉。

不要锁定按钮,只需先尝试编辑。看看这对你有帮助吗。

编辑3:

设置抽屉列表视图和抽屉布局:

    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)findViewById(R.id.list_slidermenu);
    mDrawerLayout.setDrawerLockMode(mDrawerLayout.LOCK_MODE_LOCKED_CLOSED); //prevents user from manually opening the drawer
   getActionBar().setHomeButtonEnabled(false); // Prevents user from opening the drawer using the app icon

然后在你的监听器上添加:

 yourButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            mDrawerLayout.openDrawer(mDrawerList); // This will open the button on click of the item

        }
    });

我在我的应用上测试了这个,我相信这是你想要的东西。因此,即使用户试图滑动或单击应用程序图标,抽屉也不会打开,但是一旦在内容视图上单击某个项目,它就会打开。这是我相信你想要的输出。