为了实现导航栏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
(与其他ListView
,ScrollView
或WebView
一样。
例如,当TopLayer
是WebView
个实例时,我无法滚动并与导航栏的 ListView
进行交互,因为它是{{ 1}}滚动(尽管我把它向右移动)。
我想将许多WebView
叠加在一起并不是一件容易的事,但我希望有很多方法可以克服这些问题。
感谢您的帮助!
修改
顺便说一下,这就是我改变ScrollableView
视图的方式(使用TranslateAnimation):
TopLayer
答案 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}})。