如何在Android中干净地叠加ScrollableViews

时间:2012-04-05 13:23:43

标签: android android-layout android-side-navigation

为了实现导航栏ala Facebook,我有以下布局配置:

<FrameLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
>
   <!-- This is the Lower Layer hosting the navbar -->
   <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
   >
      <!-- ListView representing the navbar -->
      <ListView 
       />
   </LinearLayout>

   <!-- This is the Top Layer hosting the Content -->
   <FrameLayout 
      android:layout_width="match_parent"
      android:layout_height="match_parent"
   > 
      <!-- This is where the View of the Content will be injected -->
   </FrameLayout>
</FrameLayout>

所以基本的想法是,当我想打开导航栏时,我只需将 TopLayer 移到右侧,导航栏就会显示出来。 现在这很好用,我可以与 navbar的 ListView进行交互,以便在应用程序中导航,只要在TopLayer内注入的视图不是ScrollableView(与其他ListViewScrollViewWebView一样。

例如,当TopLayerWebView个实例时,我无法滚动并与导航栏的 ListView进行交互,因为它是{{ 1}}滚动(尽管我把它向右移动)。

我想将许多WebView叠加在一起并不是一件容易的事,但我希望有很多方法可以克服这些问题。

感谢您的帮助!

修改

顺便说一下,这就是我改变ScrollableView视图的方式(使用TranslateAnimation):

TopLayer

2 个答案:

答案 0 :(得分:1)

根据我的应用 - Android UI Patterns(https://play.google.com/store/apps/details?id=com.groidify.uipatterns),Facebook导航和动画有2个示例实现,这是:

如果有效,你可以尝试一下。

答案 1 :(得分:1)

原来问题不是由于重叠ScrollableView或其他事情,而是因为当使用TranslateAnimation时,动画视图的逻辑位置(即:不可视)仍然受其约束原来的位置。因此,当我以为我点击导航的项目时,我实际上正在与我认为已移动的ContentView进行交互。

现在我正在使用ObjectAnimator解决了这个问题并且效果非常好。我只需要确保与Pre-Honeycomb设备的兼容性(我正在考虑使用NineOldAndroids来处理这个问题。如果有人知道使用旧动画API正确修复此问题的任何其他选择,请随时回答{{ 3}})。