たとえば、単独の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>
ありがとう
はい、引き出しレイアウトのスライド部分として任意のビューを持つことができます。 FrameLayoutを引き出しとして宣言し、それを自分のフラグメントに置き換えることを好みます。
表示されるエラーは、おそらく実装のJava部分にある他の理由によるものです。
_Android:id="@+id/left_drawer"
_を移動(または新しいIDを作成)して重力を設定すると、これは機能します。
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);
_
(これは基本的に@Karakuriが投稿したものですが、より完全な説明と例があります。)
isDrawerOpen, closeDrawer
などのメソッドに対して正しいオブジェクト(mDrawerLinearと呼ばれるLinearLayout
)を渡すようにしてください。この行は私のClassCastException
を解決しました:
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLinear);
ListView
の代わりにAndroid:id="@+id/left_drawer"
をLinearLayoutに移動してみてください