【问题标题】:How to programmatically setLockDrawerMode如何以编程方式设置LockDrawerMode
【发布时间】:2014-11-21 03:30:47
【问题描述】:

我创建了一个切换抽屉,当用户单击内容视图中显示的项目时,抽屉将自动从右侧滑动。但是,此时,抽屉可以手动切换(用户可以通过从屏幕边缘滑动来滑动打开抽屉)用户打开以及切换打开当用户点击显示的项目时自动。因此,我将以下代码行实现为 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);

【问题讨论】:

  • 当您说“手动切换”时,您的意思是用户可以通过从屏幕边缘滑动来滑动打开抽屉吗?
  • 是的,在这种情况下手动切换是用户可以通过从屏幕边缘滑动来滑动打开抽屉

标签: android navigation-drawer slidingdrawer drawerlayout drawertoggle


【解决方案1】:

您可以尝试这样做:

首先调用你的抽屉布局:

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

        }
    });

为了解锁的合理性,我只是展示了它,以防你想再次打开抽屉。

不要锁定你的按钮,先试试我的编辑。看看对你有没有帮助。

编辑 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

        }
    });

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

【讨论】:

  • 它不起作用,我已经实现了以下代码 {mDrawer.setDrawerLockMode(mDrawer.LOCK_MODE_LOCKED_CLOSED); getActivity().getActionBar().setHomeButtonEnabled(false);} 会出现如下调试结果:用户只能手动切换抽屉,点击项目时抽屉不会自动切换
  • 我想知道我打开抽屉的合理性是什么?谢谢
  • 我会试用您的解决方案并更新您的进度。谢谢
  • 我已经尝试过您的解决方案,但是,我仍然面临同样的问题,滑动抽屉仍然会在手动和用户点击内容视图中显示的项目时自动滑入
  • 启发我,您想在用户单击内容视图上的项目时自动打开您的抽屉,并且在没有点击时不允许用户打开抽屉是正确的吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-13
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2018-03-14
相关资源
最近更新 更多