Ответ 1
На основе документации доступны только доступные гравитации, которые можно использовать Gravity.LEFT
, Gravity.RIGHT
или GravityCompat.START
, GravityCompat.END
.
(Акцент мой):
Позиционирование и компоновка ящика контролируется с помощью android: атрибут layout_gravity для дочерних представлений, соответствующих с которого вы хотите, чтобы ящик вышел из: слева или справа. (Или начало/конец на версиях платформы, поддерживающих направление макета.)
Глядя на исходный код
public void setDrawerLockMode(int lockMode, int edgeGravity) {
final int absGrav = GravityCompat.getAbsoluteGravity(edgeGravity,
ViewCompat.getLayoutDirection(this));
if (absGrav == Gravity.LEFT) {
mLockModeLeft = lockMode;
} else if (absGrav == Gravity.RIGHT) {
mLockModeRight = lockMode;
}
if (lockMode != LOCK_MODE_UNLOCKED) {
// Cancel interaction in progress
final ViewDragHelper helper = absGrav == Gravity.LEFT ? mLeftDragger : mRightDragger;
helper.cancel();
}
switch (lockMode) {
case LOCK_MODE_LOCKED_OPEN:
final View toOpen = findDrawerWithGravity(absGrav);
if (toOpen != null) {
openDrawer(toOpen);
}
break;
case LOCK_MODE_LOCKED_CLOSED:
final View toClose = findDrawerWithGravity(absGrav);
if (toClose != null) {
closeDrawer(toClose);
}
break;
// default: do nothing
}
}
Сам метод проверяет, действительно ли сила тяжести LEFT
или RIGHT
(но использует метод GravityCompat
, поэтому START
и END
должны быть соответствующим образом переведены).
Это означало бы, что, установив гравитацию "start|bottom"
, вы вводите недействительную гравитацию, из-за чего setDrawerLockMode()
ничего не делает.