Как программно установить setLockDrawerMode

Я создал переключатель, где он автоматически сдвигается справа, когда пользователь щелкает элемент, отображаемый в представлении содержимого. Однако в этот момент ящик можно переключать вручную (пользователь может сдвинуть ящик, проведя пальцем по краю экрана), открывая его пользователем, а также открывать автоматически, когда пользователь нажимает на отображаемый элемент. Следовательно, я реализовал следующую строку кода как 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 ответ

Решение

Вы можете попробовать сделать это:

Сначала назовите макет вашего ящика:

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

        }
    });

Я проверил это в своем приложении, я считаю, что это то, что вы хотели. Таким образом, в основном ящик не откроется, даже если пользователь попытается провести пальцем по экрану или щелкнуть значок приложения, но он откроется после нажатия элемента в представлении содержимого. что я считаю, ваш желаемый результат.

Другие вопросы по тегам