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