androidandroid-linearlayoutandroid-relativelayoutslidingdrawer

SlidingDrawer underlap in RelativeLayout


I used a SlidingDrawer like in this tutorial

It works in a LinearLayout, but there is always a whitespace depending of the hight of the slider and all other stuff show up below the whitespace.

The soloution should be to use a Relative Layout. This deletes the whitespace but the handlerbutton from the slider seems to be under the content in the scrollview and don't do anything by clicking on it. See the screenshot enter image description here

MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<include
    android:id="@+id/tbar"
    layout="@layout/primerdivisor" />

<SlidingDrawer
    android:id="@+id/SlidingDrawer"
    android:layout_width="wrap_content"
    android:layout_height="150dp"
    android:content="@+id/contentLayout"
    android:handle="@+id/slideButton"
    android:orientation="vertical"
    android:padding="10dip"
    android:rotation="180">
    <!-- Handle button -->


    <Button
        android:id="@+id/slideButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_selector"
        android:ems="10"
        android:rotation="180"
        android:text="Show" android:clickable="true"/>

    <!-- Content Layout -->
    <LinearLayout
        android:id="@+id/contentLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FFCC"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dip">

        <Button
            android:id="@+id/Button01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:background="@drawable/button_selector"
            android:text="Button 1"
            android:textColor="@color/textBlack" />

        <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:background="@drawable/button_selector"
            android:gravity="center"
            android:padding="5dp"
            android:text="Text View Item"
            android:textColor="@color/textBlack" />
    </LinearLayout>
</SlidingDrawer>

<ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:orientation="vertical">
....

MainActivity.java

...
private void createSlider(){
    slideButton = (Button) findViewById(R.id.slideButton);
    slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer);
    b1 = (Button) findViewById(R.id.Button01);
    textView = (TextView) findViewById(R.id.text);

    // Setting Listeners to all buttons and textview
    setListeners();

    // Listeners for sliding drawer
    slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
        @Override
        public void onDrawerOpened() {

            // Change button text when slider is open
            Log.i("----","blaaaaaa open");
            slideButton.setText("Close");
        }
    });

    slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
        @Override
        public void onDrawerClosed() {

            // Change button text when slider is close
            slideButton.setText("Open");
        }
    });
}

// Listeners method
void setListeners() {
    b1.setOnClickListener(this);
    textView.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    // Toast shown on sliding drawer items click
    if (v.getId() == R.id.text) {
        Toast.makeText(MainActivity.this, textView.getText() + " Clicked",
                Toast.LENGTH_SHORT).show();
    } else {
        Button b = (Button) v;
        Toast.makeText(MainActivity.this, b.getText() + " Clicked",
                Toast.LENGTH_SHORT).show();
    }
}
...

The slider should overlap the scrollview when its whiped out


Solution

  • In view hierarchy terms, views defined at the beginning of your layout XML are "deeper" than those defined later.

    In your case your ScrollView is added to the hierarchy after your SlidingDrawer so what your seeing is to be expected.

    Move your SlidingDrawer to below your ScrollView and it should be above it.