El área de gatillo de la navegación de Android es demasiado pequeña
-
20-12-2019 - |
Pregunta
Estoy trabajando en el cajón de navegación que proporciona la biblioteca offical de Android.Y lo pasé de lado izquierdo, el problema es por defecto, el área de activación es demasiado pequeña, el usuario tiene que tocar a la izquierda para abrir el cajón, ¿hay alguna forma de personalizar el tamaño, o ampliar el tamaño?Gracias por ayudar.
Solución
Puedes hacer algo así:
private void setLeftMargin() {
java.lang.reflect.Field mDragger = null;
try {
mDragger = mDrawerLayout.getClass()
.getDeclaredField("mLeftDragger");
} catch (NoSuchFieldException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
mDragger.setAccessible(true);
ViewDragHelper draggerObj = null;
try {
draggerObj = (ViewDragHelper) mDragger.get(mDrawerLayout);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
java.lang.reflect.Field mEdgeSize = null;
try {
mEdgeSize = draggerObj.getClass().getDeclaredField("mEdgeSize");
} catch (NoSuchFieldException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mEdgeSize.setAccessible(true);
int edge = 0;
try {
edge = mEdgeSize.getInt(draggerObj);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mEdgeSize.setInt(draggerObj, edge * 1);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
establecerá área lateral izquierda según su requisito. Puede configurar int edge = valueYouNeed;
Hope, lo ayudará.
Otros consejos
Kotlin versión de Andim Responder
private fun setDrawerEdge(mDrawerLayout: DrawerLayout, isLeftDrawer: Boolean = true) {
try {
val manager = mActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val width = DisplayMetrics().also { manager.defaultDisplay.getMetrics(it) }.widthPixels
val viewDragHelper = mDrawerLayout::class.java
.getDeclaredField(if (isLeftDrawer) "mLeftDragger" else "mRightDragger")
.apply { isAccessible = true }
.run { get(mDrawerLayout) as ViewDragHelper }
viewDragHelper.let { it::class.java.getDeclaredField("mEdgeSize") }
.apply { isAccessible = true }
.apply { setInt(viewDragHelper, width/2) }
} catch (e: Exception) {
e.printStackTrace()
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow