就像我在标题中询问的那样,我想知道是否有任何方式可以与我的内容片段进行交互,我将抽屉打开并锁定(在其顶部也禁用了抽屉锁定时的应用按钮点击)。
我知道还有其他解决方案(例如使用简单的listView而不是抽屉来定义新布局)但我希望保留抽屉以节省时间和代码。
提前感谢所有人。
答案 0 :(得分:2)
我有类似的问题。我创建了一个自定义DrawerLayout
类,在处理后将触摸事件传递给主内容视图。您的里程可能会有所不同,但似乎对我有用:
import android.content.Context;
import android.support.v4.widget.DrawerLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class TouchForwardingDrawerLayout extends DrawerLayout {
public TouchForwardingDrawerLayout( Context context, AttributeSet attrs ) {
super( context, attrs );
}
@Override
public boolean onTouchEvent( MotionEvent event ) {
boolean r = super.onTouchEvent( event );
getChildAt( 0 ).dispatchTouchEvent( event );
return r;
}
}
答案 1 :(得分:0)
锁定抽屉窗格时,我也注意到了类似的行为。要以方便的方式解决此问题,只需将片段内容视图置于layout-XML中的DrawerLayout
之外。例如:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="@id/layoutDrawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:saveEnabled="false">
<!-- content is outside this drawer layout
because locking the drawer also disables
touchevents propagation to layoutContentFrame -->
<!-- navigation drawer -->
<LinearLayout
android:layout_height="match_parent"
android:layout_width="@dimen/width_drawer_left"
android:orientation="vertical"
android:layout_gravity="left|start"
android:padding="10dp"
android:background="@color/drawer_left_background">
<ListView
android:id="@id/drawerLeft"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
<!-- content view -->
<FrameLayout
android:id="@id/layoutContentFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/width_drawer_left">
<!-- content will be added as fragments here -->
</FrameLayout>
</RelativeLayout>
至少它在没有任何代码破解的情况下解决了我的问题:)