滑动抽屉文本

时间:2013-09-10 17:45:18

标签: android

我希望使用滑块手柄移动“顶部文本”,类似于“底部文本”的操作,并在滑块到达顶部时将其推离屏幕。这可能吗?我不一定需要使用SlidingDrawer,我只需要提供行为即可。如果答案只是xml那就太好了。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >
    <TextView android:id="@+id/textViewTop"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Top Text" />
    <SlidingDrawer android:id="@+id/SlidingDrawer"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent"
                   android:content="@+id/contentLayout"
                   android:handle="@+id/slideHandleButton" >
    <Button android:id="@+id/slideHandleButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Slider" >
    </Button>
    <LinearLayout android:layout_width="wrap_content"
                  android:id="@+id/contentLayout"
                  android:layout_height="wrap_content">
        <TextView android:id="@+id/textViewBottom"
                  android:text="Bottom Text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />
    </LinearLayout>
  </SlidingDrawer>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

持有TextView

Top Text应该是SlidingDrawer的一部分。目前它不是。此外,您为顶部文字和底部文字定义了相同的ids。我已经改变了。看看以下是否解决了这个问题:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >

    <SlidingDrawer android:id="@+id/SlidingDrawer"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent"
                   android:content="@+id/contentLayout"
                   android:handle="@+id/contentLayoutTop" >

        <LinearLayout android:layout_width="wrap_content"
                  android:id="@+id/contentLayoutTop"
                  android:layout_height="wrap_content"
                  android:orientation="vertical" >

            <TextView android:id="@+id/textViewInTransitTop"
                  android:text="Top Text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />

            <Button android:id="@+id/slideHandleButton"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Slider" >
            </Button>

        </LinearLayout>            

        <LinearLayout android:layout_width="wrap_content"
                  android:id="@+id/contentLayout"
                  android:layout_height="wrap_content">

            <TextView android:id="@+id/textViewInTransit"
                  android:text="Bottom Text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />

        </LinearLayout>

  </SlidingDrawer>

</RelativeLayout>

如果您需要@+id/slideHandleButton之前(或之后)的顶部文字,请更改定义它们的顺序。如果您需要符合文本的按钮,请移动包含顶部文本的LinearLayout内的按钮声明。

修改

  

如果答案只是xml,那就太好了。

我尝试保持在您的要求范围内,但这不能仅在xml中完成。幸运的是,代码部分很简单:

在您的活动中onCreate(Bundle)

SlidingDrawer slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer);

final TextView textViewInTransitTop = (TextView)
                                findViewById(R.id.textViewInTransitTop);

slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {

    @Override
    public void onDrawerOpened() {

        // Drawer's been opened // Don't use View.INVISIBLE
        textViewInTransitTop.setVisibility(View.GONE);              
    }
});

slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {

    @Override
    public void onDrawerClosed() {

        // Text on top is back again
        textViewInTransitTop.setVisibility(View.VISIBLE);               
    }
});