34

LinearLayoutたとえば、 aまたは aRelativeLayoutを画面の左からスライドさせたいと思いますListView

à LinearLayoutwithを使用しようとし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>

ありがとう

4

4 に答える 4

63

これは、両方を移動android:id="@+id/left_drawer"(または新しい ID を作成) し、重力を設定すると機能します。

IDの移動(または新しいもの)は参照が正しいためcloseDrawer()、子ビューではなくそれを呼び出します。

しかし、最も重要なことは、あなたが言及したようにDrawerLayout、その要素にandroid:layout_gravityセットが必要です。

最後に、closeDrawer()必要な重力を持つベース ビューで close を呼び出す必要があります。

例:

<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);

(これは基本的に @Karakuri が投稿したものですが、より完全な説明と例があります。)

于 2013-08-06T05:14:35.660 に答える
26

はい、引き出しレイアウトのスライド部分として任意のビューを持つことができます。FrameLayout をドロワーとして宣言し、それを自分のフラグメントに置き換えることを好みますが、問題なく動作します。

発生しているエラーは、おそらく実装の Java 部分の他の理由によるものです。

于 2013-05-24T15:47:07.110 に答える
7

などのメソッドに正しいオブジェクト(LinearLayoutmDrawerLinearと呼ばれる)を渡すようにしてくださいisDrawerOpen, closeDrawer。この行で解決しましたClassCastException

boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLinear);
于 2014-01-08T17:33:48.493 に答える