3

这是我的视图层次结构:

-RelativeLayout [rootView] (根)

  • LinearLayout [menu_holder](菜单片段布局)

  • RelativeLayout [app_holder](应用内容布局)

    • Action Bar(实现 ActionBar < 2.1 的自定义视图

    • FrameLayout [content_fragment](加载内容片段的布局)

    • FloatingMenu(自定义 LinearLayout 以显示浮动小部件)

<com.example.app.views.widgets.RootLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drag_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white" >

    <LinearLayout
       android:id="@+id/menu_holder"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:background="@color/red"
       android:orientation="vertical" />

    <com.example.app.views.widgets.AppHolder
    android:id="@+id/app_holder"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/gray" >

    <com.example.app.widgets.ActionBar
        android:id="@+id/action_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/content_holder"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/action_bar"
        android:background="@drawable/backrepeat" >
    </FrameLayout>

    <com.example.app.widgets.FloatingMenu
        android:id="@+id/floating_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:padding="15dp"
        android:visibility="gone" />
    </com.example.app.views.widgets.AppHolder>
</com.example.app.views.widgets.RootLayout>

现在我将 menu_holder 和 app_holder 都加载到 rootView 中,这样 app_holder 就保持在顶部。现在,当用户按下 MENU 按钮时,app_holder 向右滑动以在左侧显示底层菜单片段,如下图所示:

在此处输入图像描述

我在可运行文件中使用了一个滚动条来向右滑动 app_holder。在偏移我的 app_holder 后,我还每隔 16 毫秒在 rootView 上调用一次 invalidate()。

它工作正常,但是当菜单片段可见时,当任何内容加载到 content_fragment(可见性集或从 web 加载)中时,就会出现问题。无效的视图(越界)调用 requestLayout() 并且以下布局调用将 app_holder 重置为其初始位置。我已经在我的 content_fragment 上实现了延迟加载列表视图,因此列表视图上的任何更新(notifyDataSetChanged 等)都会启动重新布局调用。

如何阻止这种情况发生?

在右侧所有动态加载的视图上覆盖和评论 requestLayout() 将解决问题,但是还有其他正确的方法吗?

4

0 回答 0