使用DrawerLayout时,我正在努力使用LinearLayout。这是使用Draw StudioLayout的Android Studio模板:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:background="#00f"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:background="#f00"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
</LinearLayout>
</LinearLayout>
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.test.testdrawerlayout.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
Android Studio中的预览显示:
但是,在我的Nexus 5上运行时,显示如下:
如您所见,layout_weight =&#34; 1&#34;部分根本没有显示。当我使用内部LinearLayout创建一个空白项目时,布局工作(蓝色布局占据屏幕的大部分,底部是红色布局,就像预览一样)。
任何想法都会非常感激,因为我现在完全被困住了。提前谢谢。
答案 0 :(得分:1)
看来我使用的是较旧的Android SDK平台。一旦我进入SDK管理器并安装了API 19,它就可以工作了(使用新项目)。
也许这是旧版实施中的错误?
答案 1 :(得分:1)
这绝对是Android问题(或至少是appcompat/design
库问题)。我在DrawerLayout中测试了不同的布局,并得出结论,问题是&#34; content_layout
&#34;文件 - 显示在抽屉下方的文件。
只使用干净,简单的FrameLayout工作。没有CoordinatorLayout,没有片段,没有自定义布局,也没有第三方布局,只是一个很好的旧FrameLayout&#34; match_parent
&#34;宽度和高度。
答案 2 :(得分:0)
应该是这样的:
<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">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
请注意官方Android文档说明
主要内容视图(上面的FrameLayout)必须是第一个 DrawerLayout中的子项,因为XML顺序意味着 z-ordering和抽屉必须位于内容之上。
有关更多参考和信息,建议您点击here查看此链接。
如果它解决了您的问题,请将此标记为答案。谢谢。
<强>更新强>:
好的,首先,从你的linearlayout中删除“xmlns:android =”http://schemas.android.com/apk/res/android“”。这应该只出现一次并在主根xml中,这导致DrawerLayout。
接下来,修复您使用权重的方式。声明一个android:weightSum属性。把weightSum想象成一个馅饼。在这种情况下,我们将它设置为5,所以我们有5个馅饼。使用android:layout_weight属性在此布局中的任何内容。第一个设置为4,将占用屏幕的4/5。最后一个是底部屏幕的1/5。
确保此LinearLayout仍然包含在FrameLayout中。您的LinearLayout应如下所示:
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="5">
<LinearLayout
android:background="#00f"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"/>
<LinearLayout
android:background="#f00"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
</LinearLayout>
</LinearLayout>