Ondrej Tokar
Ondrej Tokar

Reputation: 5070

Nested linear layout in frame layout causing issues

I have tried several different versions of my layout but each of them is having some not working symptoms.

I just wanted to have a working slide menu.

Option one (nested linear layout in frame layout):

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

    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
    <!-- Listview to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"
        />
    <LinearLayout
        android:visibility="gone"
        android:background="@drawable/background_parchment"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/challengerWandIdEt"
        android:enabled="true"
        android:hint="WandId of challenger"
        android:clickable="false" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Accept battle from"
        android:id="@+id/challengeBtn"
        android:enabled="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Log out"
        android:id="@+id/logOutBtn"
        android:clickable="true"
        android:enabled="true" />

    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/battleMode"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true"
            android:singleLine="true"
            android:lines="1"/>
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/spells"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true" />
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/hightScore"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true" />
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/endAllBattles"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true"
            android:focusable="true"
        />
    </LinearLayout>
    </FrameLayout>
</android.support.v4.widget.DrawerLayout>

Causing: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams

Option 2 (it is working when I set visiblity ofLinearLayout to gone and I end FrameLayout before beginning of LinearLayout), problem is, I want to see content of the LinearLayout:

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

    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        />
    <!-- Listview to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"
        />
    <LinearLayout
        android:visibility="gone"
        android:background="@drawable/background_parchment"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/challengerWandIdEt"
        android:enabled="true"
        android:hint="WandId of challenger"
        android:clickable="false" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Accept battle from"
        android:id="@+id/challengeBtn"
        android:enabled="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Log out"
        android:id="@+id/logOutBtn"
        android:clickable="true"
        android:enabled="true" />

    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/battleMode"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true"
            android:singleLine="true"
            android:lines="1"/>
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/spells"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true" />
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/hightScore"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true" />
    <model.TypeWriter
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/endAllBattles"
            android:text=""
            android:textColor="@color/main_menu_text_color_selector"
            android:enabled="true"
            android:clickable="true"
            android:focusable="true"
        />
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

Option 3: Same as previous one but LinearLayout visiblity is not set to gone. Then everything seems to work, but after clicking on element of the menu, OnItemClick event is not triggered.

I have searched for this issue and everyone suggested to change focusable and clickable to false, but that didn't help. Or maybe I did something wrong. (I have added clickable and focusable to each element of main activity)

Any idea?

Upvotes: 0

Views: 724

Answers (1)

M&#233;d&#233;ric
M&#233;d&#233;ric

Reputation: 948

You need to add the content of your view inside the main frame layout, beside your sliding menu like this:

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

        <!-- Your content -->

    </FrameLayout>


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

For your example you will have

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

        <LinearLayout
            android:visibility="gone"
            android:background="@drawable/background_parchment"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/challengerWandIdEt"
                android:enabled="true"
                android:hint="WandId of challenger"
                android:clickable="false" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Accept battle from"
                android:id="@+id/challengeBtn"
                android:enabled="true" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Log out"
                android:id="@+id/logOutBtn"
                android:clickable="true"
                android:enabled="true" />

            <model.TypeWriter
                    android:layout_gravity="center_horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/battleMode"
                    android:text=""
                    android:textColor="@color/main_menu_text_color_selector"
                    android:enabled="true"
                    android:clickable="true"
                    android:singleLine="true"
                    android:lines="1"/>

            <model.TypeWriter               
                    android:layout_gravity="center_horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/spells"
                    android:text=""
                    android:textColor="@color/main_menu_text_color_selector"
                    android:enabled="true"
                    android:clickable="true" />

            <model.TypeWriter
                    android:layout_gravity="center_horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/hightScore"
                    android:text=""
                    android:textColor="@color/main_menu_text_color_selector"
                    android:enabled="true"
                    android:clickable="true" />
            <model.TypeWriter
                    android:layout_gravity="center_horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/endAllBattles"
                    android:text=""
                    android:textColor="@color/main_menu_text_color_selector"
                    android:enabled="true"
                    android:clickable="true"
                    android:focusable="true"
                />
            </LinearLayout>
    </FrameLayout>


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

Upvotes: 1

Related Questions