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.

¿Fue útil?

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
scroll top