Intereting Posts

Можно ли использовать что-то, кроме списка, как скользящий ящик в drawerlayout

Я хотел бы иметь, например, LinearLayout или RelativeLayout скользящий слева от экрана вместо одиночного ListView .

Я попытался использовать à LinearLayout с android:layout_gravity="start" и у меня была эта ошибка во время выполнения:

 ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 

Вот файл макета:

 <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" android:background="@android:color/white" > <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="320dp" android:layout_height="match_parent" android:layout_gravity="start" android:orientation="vertical"> <ImageView android:id="@+id/ivwLogo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/video_icon" /> <ListView android:id="@+id/left_drawer" android:layout_width="320dp" android:layout_height="match_parent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="@android:color/white" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

благодаря

Solutions Collecting From Web of "Можно ли использовать что-то, кроме списка, как скользящий ящик в drawerlayout"

Да, в качестве скользящей части макета выдвижного ящика можно иметь любой вид. Я предпочитаю объявлять FrameLayout как ящик и заменять его своим фрагментом, и он работает отлично.

Ошибка, которую вы получаете, вероятно, связана с какой-то другой причиной в Java-части вашей реализации.

Это будет работать, если вы переместите оба android:id="@+id/left_drawer" (или создайте новый идентификатор) и установите гравитацию.

Перемещение id (или новое) является таким образом, что ссылка правильная, поэтому вы вызываете на closeDrawer() а не дочерние.

Но самое главное, DrawerLayout требует, чтобы у элемента был установлен android:layout_gravity , как вы упомянули.

Наконец, вам нужно вызвать close closeDrawer() на базовом представлении, с требуемой силой тяжести.

Пример:

 <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" android:background="@android:color/white"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/left_drawer" android:layout_width="320dp" android:layout_height="match_parent" android:layout_gravity="start" android:orientation="vertical"> <ImageView android:id="@+id/ivwLogo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/video_icon" /> <ListView android:id="@+id/left_drawer_child" android:layout_width="match_parent" android:layout_height="match_parent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="@android:color/white" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

В коде:

 DrawerLayout mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout) LinearLayout mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer); ListView mDrawerListChild = (ListView) findViewById(R.id.left_drawer_child); ... mDrawer.closeDrawer(mDrawerLinear); 

(Это в основном то, что написал @ Каракури, но с более полным объяснением и примером.)

Убедитесь, что вы передаете правильный объект (ваш LinearLayout называемый mDrawerLinear) для таких методов, как isDrawerOpen, closeDrawer и т. Д. Эта строка разрешила мое ClassCastException :

 boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLinear); 

Попробуйте переместить android:id="@+id/left_drawer" в LinearLayout вместо ListView