我如何与导航抽屉锁定在打开位置的内容片段进行交互?

时间:2014-04-17 06:57:19

标签: android android-fragments navigation-drawer

就像我在标题中询问的那样,我想知道是否有任何方式可以与我的内容片段进行交互,我将抽屉打开并锁定(在其顶部也禁用了抽屉锁定时的应用按钮点击)。

我知道还有其他解决方案(例如使用简单的listView而不是抽屉来定义新布局)但我希望保留抽屉以节省时间和代码。

提前感谢所有人。

2 个答案:

答案 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>

至少它在没有任何代码破解的情况下解决了我的问题:)