Mein Problem ist folgendes: Ich sperre das Navigationsmenü setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN)
im Querformat des Tablets, aber ich brauche das Fragment von rechts um aktiv zu sein, damit ich es anklicken kann Navigation immer geöffnet. Aber ich weiß nicht, wie es geht. Bitte helfen Sie.Anklickbares Fragment anklickbar, wenn die Navigationsleiste geöffnet wird
6
A
Antwort
7
Es gibt ein paar Dinge, die Sie tun müssen:
das Layout deaktivieren durch Schwund eine transparente Farbeinstellung:
drawer.setScrimColor(Color.TRANSPARENT);
Schublade verriegeln
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
eine benutzerdefinierte Schublade Klasse erstellen, die das versehentliche Modus Sie suchen erlaubt:
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); } @Override 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); } } }
Verwenden Sie diese Klasse in xml:
<com.example.myapplication.CustomDrawer xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> </FrameLayout> <ListView android:layout_width="100dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111"/> </com.example.myapplication.CustomDrawer>
2
Dies ist eine schwierige Sache. Wenn die Schublade geöffnet ist, fängt sie Ihre Berührungsereignisse ab, die das Schließen der Schublade auslösen. Um das zu verhindern, müssen Sie Ihre DrawerLayout und überschreiben die onInterceptTouchEvent Methode Unterklasse:
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;
}
@Override
public boolean onInterceptTouchEvent (MotionEvent ev)
{
boolean result = super.onInterceptTouchEvent(ev);
if (rightView != null && isDrawerOpen(rightView))
{
DrawerLayout.LayoutParams layoutParams = (DrawerLayout.LayoutParams) rightView.getLayoutParams();
if (layoutParams.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;
}
}
Dies ist mein Code mit einem rechten Schublade arbeiten. Ich bin mir sicher, dass du das für deine linke Schublade anpassen kannst. Vielleicht haben Sie auch den Schatten deaktivieren:
mDrawerLayout.setScrimColor(Color.TRANSPARENT);
Danke, das funktioniert ein. –
Können Sie immer noch auf die Elemente in Ihrer Schublade klicken, da sie für den gesamten Bildschirm den Wert false zurückgibt? – Quanturium
@Quanturium für das müssen Sie überprüfen, ob die Berührung sogar auf dem ListView durchgeführt wird oder nicht. Mein Code wurde entsprechend aktualisiert. – Simas