dan*_*c05 25 android overlay android-actionbar navigation-drawer
我正在尝试在我的应用程序中实现新的Android导航抽屉.我创建了一个BaseActivity.java来处理Drawer设置和监听器,我有两个扩展这个基类的子活动.在第二个活动中,我计划使用以下attrs使用不同的操作栏样式:
<item name="android:windowActionBarOverlay">true</item>
<item name="android:background">@android:color/transparent</item>
Run Code Online (Sandbox Code Playgroud)
使操作栏透明,并使内容更丰富,因为我的布局中有一个图片标题.
我已经实现了这一点,但现在的问题是,因为内容正在扩展以利用使用ActionBar作为叠加层的额外空间,导航抽屉本身也在扩展并且它与ActionBar重叠,造成非常糟糕看布局:

我想要做的是,实际内容(将用片段填充的框架布局)占用额外空间,但导航抽屉仍然位于操作栏下方,类似于Play音乐应用:

关于我能做些什么来实现这一点的任何想法?
编辑所以,根据Ahmad的帮助,我marginTop只在ListView上设置.这是布局:
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
          android:layout_marginTop="?android:attr/actionBarSize"
<!-- This was added after seeing the crazy effect, but does nothing -->
          android:layout_marginBottom="0dp"
          android:layout_marginLeft="0dp"
          android:layout_marginRight="0dp"
          android:layout_width="240dp"
          android:layout_height="fill_parent"
          android:layout_gravity="start"
          android:choiceMode="singleChoice"
          android:background="?attr/listviewBackground"
          />
Run Code Online (Sandbox Code Playgroud)
而现在,它对于顶部来说效果很好,但由于某种原因,在视图的底部也有一个边距,这对我来说根本没有任何意义.这是一个截图.
不确定是什么导致它:(
小智 16
而现在,它对于顶部来说效果很好,但由于某种原因,在视图的底部也有一个边距,这对我来说根本没有任何意义.这是一个截图.
如果将ListView引力设置为start | bottom,则可以解决问题.底部不添加额外的保证金.看起来DrawerLayout默认引力是start | center
<ListView
    android:id="@+id/left_drawer"
    android:layout_marginTop="?android:attr/actionBarSize"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start|bottom"/>
Run Code Online (Sandbox Code Playgroud)
        dan*_*c05 14
万一有人对另一个人有兴趣接受这个问题.这是发生了什么.
我尝试将边距设置为列表视图的顶部,如下所示:
android:layout_marginTop="?android:attr/actionBarSize"
Run Code Online (Sandbox Code Playgroud)
但正如在编辑过的问题中提到的那样,尽管没有在布局资源文件上设置,但有一个奇怪的行为,其中底部也有一个边距.
所以,我正在密切关注Play音乐应用程序并注意到它实际上不是边距,而是一些填充,此外它们使用自定义背景填充填充指定的空间,并使用透明色.
这是我做的:
在ListView的顶部设置填充,而不是边距:
android:paddingTop="?android:attr/actionBarSize"
如前所述,重要的是不对每个设备的尺寸进行硬编码.
它看起来像这样:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape  android:shape="rectangle">
        <solid android:color="#80000000" />
    </shape>
</item>
<item android:top="@dimen/action_bar_default_height">
    <shape
            android:shape="rectangle">
        <solid android:color="@color/light_gray" />
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)
请注意,我试图?android:attr/actionBarSize在drawable 上使用,但这使得app力量接近.相反,我搜索了grepcode,并为操作栏找到了一些不同大小的dimen文件,所以我将这些添加到我自己项目的dimen文件中.  
在那之后,我觉得我看起来很棒,请注意截图视图中的listview和操作栏不重叠,listview的透明部分是正确的大小.

希望能帮助任何想知道如何实现这一目标的人.
您可以在布局的顶部设置边距,以便内容将自己绘制在ActionBar下方.
只需在父布局中添加:
android:layout_marginTop="?android:attr/actionBarSize"
Run Code Online (Sandbox Code Playgroud)
该属性actionBarSize指的是,就像你已经猜到的那样,是指大小的ActionBar.您不能将绝对值设置为边距,因为ActionBar并非所有Android设备的尺寸都相同(平板电脑尺寸更大,手机设备尺寸更小).
编辑:
将边距设置为ListView.
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <ListView
        android:id="@+id/left_drawer"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
Google音乐应用也是如此:

|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           24766 次  |  
        
|   最近记录:  |