【问题标题】:Android - Easy/comfortable way to design DrawerLayout using Android Studio?Android - 使用 Android Studio 设计 DrawerLayout 的简单/舒适方式?
【发布时间】:2015-04-08 10:41:04
【问题描述】:

在我的应用程序中,我为其中一项活动设置了DrawerLayout,并在活动中心添加了listView。为了添加项目(Buttons 和 textView 等),我通过编辑 XML 布局文件(通过向页面添加原始属性)手动添加它们。有没有办法像你设计一个简单的Activity一样在Android Studio中设计抽屉?我添加了一个屏幕截图,显示它在我的 Studio 中的外观,所有元素都显示在页面左侧,在模拟器之外。

编辑:这是我的 XML 布局:

<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">

    <!-- The first child in the layout is for the main Activity UI-->

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:paddingBottom="@dimen/activity_vertical_margin"
            tools:context=".MainActivity"
            android:background="#ffffffff">

            <ListView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/listViewChat"
                android:layout_centerHorizontal="true"
                android:choiceMode="multipleChoice" />

        </RelativeLayout>

        <!-- Side navigation drawer UI -->
        <RelativeLayout
            android:id="@+id/drawerContainer"
            android:layout_width="270dp"
            android:layout_height="match_parent"
            android:layout_gravity="left|start"
            android:background="@drawable/splash_background_blur"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:clickable="true">

            <!--this custom view serves as a dimmer for the drawer-->
            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#73000000"
                android:id="@+id/view1"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:focusableInTouchMode="true"/>


            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/editTextUserName"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="160dp"
                android:cursorVisible="false"
                android:textColor="#FFF"
                android:textSize="20sp"
                android:background="@null"
                android:maxLength="15"
                android:inputType="textNoSuggestions"
                android:hint="Enter user name"/>

            <Button
                android:layout_width="220dp"
                android:layout_height="35dp"
                android:text="@string/buttonSelectPhoto"
                android:id="@+id/buttonTakePhoto"
                android:background="@drawable/splash_button"
                android:textColor="#FFF"
                android:layout_marginTop="200dp"
                android:layout_marginLeft="25dp"
                android:layout_marginStart="25dp"/>

            <Button
                android:layout_width="220dp"
                android:layout_height="35dp"
                android:text="@string/buttonTakePhoto"
                android:id="@+id/buttonSelectPhoto"
                android:background="@drawable/splash_button"
                android:textColor="#FFF"
                android:layout_marginTop="250dp"
                android:layout_marginLeft="25dp"
                android:layout_marginStart="25dp"
                android:layout_alignParentStart="true"/>

            <Button
                android:layout_width="220dp"
                android:layout_height="35dp"
                android:text="@string/buttonTakeATour"
                android:id="@+id/buttonTakeTour"
                android:background="@drawable/splash_button"
                android:textColor="#FFF"
                android:layout_marginTop="300dp"
                android:layout_marginLeft="25dp"
                android:layout_marginStart="25dp"/>

            <!-- <ListView
                 android:id="@+id/navList"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"/>
            <LinearLayout android:focusable="true"
                android:focusableInTouchMode="true" android:layout_width="0px"
                android:layout_height="0px" />-->

        </RelativeLayout>

    </android.support.v4.widget.DrawerLayout>


编辑
我将抽屉的内容拆分为单独的xml 文件,并尝试使用&lt;include&gt; 标签添加此内容。当我单击“汉堡包”(打开抽屉)图标时,应用程序崩溃并出现java.lang.IllegalArgumentException: No drawer view found with gravity LEFT 错误。我的布局有什么问题?


使用DrawerLayoutincludes 的活动新的独立布局(抽屉内容):

<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">

    <!-- The first child in the layout is for the main Activity UI-->
    <include layout="@layout/drawer_layout_and_content"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context=".MainActivity"
        android:background="#ffffffff">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listViewChat"
            android:layout_centerHorizontal="true"
            android:choiceMode="multipleChoice" />
    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>  


这是在主活动中用作抽屉的自定义布局:
(drawer_layout_and_content.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="match_parent"
    android:background="@drawable/splash_background_blur"
    android:id="@+id/drawerContainer">

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#73000000"
        android:id="@+id/view1"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:focusableInTouchMode="true"/>
    <Button
        android:layout_width="220dp"
        android:layout_height="35dp"
        android:text="@string/buttonSelectPhoto"
        android:id="@+id/buttonTakePhoto"
        android:background="@drawable/splash_button"
        android:textColor="#FFF"
        android:layout_marginTop="200dp"
        android:layout_marginLeft="25dp"
        android:layout_marginStart="25dp"/>
</RelativeLayout>

【问题讨论】:

  • 请发布您的布局 xml

标签: android android-studio drawerlayout


【解决方案1】:

您可以使用include 关键字来执行此操作。首先,创建一个名为drawer_content.xml 的布局文件,然后执行&lt;include layout="@layout/drawer_content"&gt;。然后你对drawer_content.xml 进行编码,就像ActivityFragment 的布局文件一样。如果您想了解更多详情,请查看here

【讨论】:

  • 听起来很有趣。你的意思是,我需要创建一个 RelativeLayout 作为独立的 xml 文件,将我想要的所有内容放入其中,然后只需 include 将其放入我选择的DrawerLayout 中?
  • @undroid 是的,没错。
  • 谢谢。我试图将其分离为一个独立的 drawer 布局,该布局包含在我的主要活动中,但出现异常 java.lang.IllegalArgumentException: No drawer view found with gravity LEFT。能否请您看一下我刚刚添加到原帖中的内容?
  • 是否应该在 Manifest 中以某种方式声明?
  • 你应该在你的drawer_layout_and_content的根视图中设置android:layout_gravity="left|start"
猜你喜欢
  • 1970-01-01
  • 2015-08-23
  • 2021-04-09
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多