块布局以编程方式传递?

时间:2012-07-31 07:22:38

标签: android android-layout android-widget

这是我的视图层次结构:

-RelativeLayout [rootView](root)

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

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

    • 操作栏(实施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&amp; app_holder进入rootView,这样app_holder就会保持在最顶层。现在,当用户按下MENU按钮时,app_holder向右滑动以显示左侧的基础菜单片段,如下图所示:

enter image description here

我在runnable中使用scroller将app_holder向右滑动。在抵消我的app_holder之后,我还在rootView上每隔16ms调用invalidate()。

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

如何阻止这种情况发生?

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

0 个答案:

没有答案