Sam Palmer
Sam Palmer

Reputation: 1725

Hiding the sliding drawer handle

I am building a view in my Android application using a sliding drawer widget. I have implemented my own custom handles (just a row of menu buttons which then changes the content of the drawer and then activates the openAmination). I have managed to disable the standard handle provided with the slidingdrawer but I want to completely remove it.

None of the standard visibility stuff in xml or java works in hiding/removing the handle:

    <SlidingDrawer android:layout_width="fill_parent" 
        android:id="@+id/slidingDrawer1" 
        android:layout_height="fill_parent" 
        android:handle="@+id/handle" 
        android:content="@+id/content" 
        android:layout_alignParentBottom="true" 
        android:layout_alignParentLeft="true"
        android:allowSingleTap="false"

        >

            <Button android:layout_width="wrap_content" 
            android:text="Close" 
            android:layout_height="wrap_content" 
            android:id="@+id/handle"
            android:visibility="gone" //DOES NOT WORK
            </Button>

            <LinearLayout android:id="@+id/content" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:background="#FFFFFF">
            </LinearLayout>
        </SlidingDrawer>

I also tried importing the view in java and doing the same but also does not work.

View h = findViewById(R.id.handle);
h.setVisibility(View.GONE);

I have then tried extending the slidingDrawer class and making my own but it still requires a handle!. Is there anyway I have a sliding drawer without a default handle?

-----SOLUTION----

draw = (SlidingDrawer)findViewById(R.id.slidingDrawer1);


    //Close the draw if opened when the user touches elsewhere on the screen
    draw.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(draw.isOpened())
            ((SlidingDrawer)v).animateOpen();
            return false;
        }});

//Open the draw by external button
     ((Button) findViewById(R.id.quiz_button)).setOnClickListener(
             new Button.OnClickListener(){
                    @Override
                    public void onClick(View arg0) {
                        draw.animateOpen();
                    } });

An the XML for the sliding draw view was:

    <SlidingDrawer android:layout_width="fill_parent" android:allowSingleTap="false" android:id="@+id/slidingDrawer1" android:content="@+id/content" android:handle="@+id/handle" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_alignParentLeft="true">
            <Button android:layout_height="wrap_content" android:layout_width="0px" android:visibility="invisible" android:text="Close" android:id="@+id/handle"></Button>
            <LinearLayout android:id="@+id/content" android:gravity="center" android:background="#4FFFFF44" android:layout_width="fill_parent" android:layout_height="76dp"></LinearLayout>
        </SlidingDrawer>

Many Thanks Sam

Upvotes: 0

Views: 5163

Answers (4)

Kishore Reddy
Kishore Reddy

Reputation: 2454

  <Button 
        android:layout_width="0dp" 
        android:layout_height="0dp" 
        android:id="@+id/handle"
        android:visibility="gone" //DOES NOT WORK
        </Button>
  1. use height and width 0dp ,for open and close use handle.performclick(); it is working for me

Upvotes: 0

lory105
lory105

Reputation: 6302

I have the same problem, I don't want to show the handle because I have a personal button that shows the SlidingDrawer at the click. So, I solve it setting the handle height to 0dp. This is my handle code:

        <ImageButton
            android:id="@+id/cash_menuGruop_handle"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_contetn"
            android:layout_height="0dp"/>

Upvotes: 1

Mark
Mark

Reputation: 5566

I found a better way to fix the problem.

Do not hide a handle itself, but it's content. I had an ImageView as a handle, but I changed it to a LinearLayout holding an ImageView.

<LinearLayout
    android:id="@id/handle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/handleImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/sliding_drawer_handle" />
</LinearLayout>

Now handleImage.setVisibility(View.INVISIBLE) works fine in onAnimationEnd.

Hope that helped :)

Upvotes: 2

triggs
triggs

Reputation: 5900

I tried for many hours and failed to get rid of the handle, the best I could do wass move it far away from the view window. If you have already extended the slidingdrawer class it should be easy.

In the onLayout method find the line

handle.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);

and change it to

handle.layout(10000, 10000, 10000, 10000);

Basically its just setting its position to way of screen.

Upvotes: 2

Related Questions