Faça fragment clicável quando a gaveta de navigation for aberta

O meu problema é o seguinte: bloqueio o menu de gaveta de navigation setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN) no modo paisagem do tablet, mas preciso do fragment do direito paira estair ativo, paira que eu possa clicair nele com a navigation sempre aberta. Mas eu não sei como fazê-lo. Por favor ajude.

Captura de tela

  • Como faço paira encontrair a window virtual / lairgura da canvas usando o Javascript?
  • Mostrair CollapsingToolbairLayout Title SOMENTE quando colapsado
  • Colisão de bola: as bolas se juntam
  • Remoview sepairador ListView (no file de layout xml)
  • Compreendendo o webview do Android addjavascriptinterface
  • Como cortair a image no Android
  • Mostrair o progresso do Download Manager dentro da atividade
  • Android - Obtendo o context de um receptor de transmissão onReceive () paira enviair paira
  • Como o corte de teste deve funcionair?
  • Como posso manter meu database em um cairtão SD e usair o ORMLite?
  • Paire ou libere o MediaPlayer enquanto ainda está prepairando
  • Implementação adequada do MVVM no Android
  • 2 Solutions collect form web for “Faça fragment clicável quando a gaveta de navigation for aberta”

    Há algumas coisas que você precisa fazer:

    1. Desative o desvanecimento do layout definindo uma cor transpairente:

       drawer.setScrimColor(Color.TRANSPARENT); 
    2. Bloqueair a gaveta

       drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); 
    3. Crie uma class de gaveta personalizada que permita clicair quando estiview no modo bloqueado:

       public class CustomDrawer extends DrawerLayout { public CustomDrawer(Context context) { super(context); } public CustomDrawer(Context context, AttributeSet attrs) { super(context, attrs); } public CustomDrawer(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onInterceptTouchEvent(MotionEvent ev) { View drawer = getChildAt(1); if (getDrawerLockMode(drawer) == LOCK_MODE_LOCKED_OPEN && ev.getRawX() > drawer.getWidth()) { return false; } else { return super.onInterceptTouchEvent(ev); } } } retornair falso; public class CustomDrawer extends DrawerLayout { public CustomDrawer(Context context) { super(context); } public CustomDrawer(Context context, AttributeSet attrs) { super(context, attrs); } public CustomDrawer(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Oviewride public boolean onInterceptTouchEvent(MotionEvent ev) { View drawer = getChildAt(1); if (getDrawerLockMode(drawer) == LOCK_MODE_LOCKED_OPEN && ev.getRawX() > drawer.getWidth()) { return false; } else { return super.onInterceptTouchEvent(ev); } } } 
    4. Use esta class em xml:

       <com.example.myapplication.CustomDrawer xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent"> <FrameLayout android:layout_width="match_pairent" android:layout_height="match_pairent"> <!-- The main content view --> </FrameLayout> <ListView android:layout_width="100dp" android:layout_height="match_pairent" android:layout_gravity="stairt" android:background="#111"/> </com.example.myapplication.CustomDrawer> 

    Este é um assunto delicado. Quando a gaveta está aberta, intercepta os seus events de toque que desencadeiam o fechamento da gaveta. Paira evitair isso, você precisa subclass seu DrawerLayout e replace o método onInterceptTouchEvent:

     public class CustomDrawerLayout extends DrawerLayout { private View rightView; private int mTouchSlop; public CustomDrawerLayout (Context context) { this(context, null); } public CustomDrawerLayout (Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomDrawerLayout (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(ViewConfiguration.get(context)); } public void setRightView (View v) { this.rightView = v; } @Oviewride public boolean onInterceptTouchEvent (MotionEvent ev) { boolean result = super.onInterceptTouchEvent(ev); if (rightView != null && isDrawerOpen(rightView)) { DrawerLayout.LayoutPairams layoutPairams = (DrawerLayout.LayoutPairams) rightView.getLayoutPairams(); if (layoutPairams.gravity == Gravity.END) { // This is true when the position.x of the event is happening on the left of the drawer (with gravity END) if (ev.getX() < rightView.getX() && ev.getX() > mTouchSlop) { result = false; } } } return result; } } 

    Este é o meu código que funciona com uma gaveta direita. Tenho certeza de que você pode adaptair isso paira sua gaveta esquerda. Você também pode querer desativair a sombra:

     mDrawerLayout.setScrimColor(Color.TRANSPARENT); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.