简体   繁体   中英

How to make layout scroll past its content in Android?

In iOS apps you can easily make it so that if you scroll down to the bottom of the page and keep scrolling you will see empty space. If you let go it will pull back so that the bottom of the content is at the bottom of the screen as if it were being held by a spring. In fact, I assume this is the default behavior because it happens so often.

I would like to do the same thing in Android, because my activity has the standard floating action button in the bottom right corner and it's blocking some of my content. If I could scroll past the content, then I would be able to see all of it.

As an example, I made a new Android Studio Project with a Blank Activity (with the floating action button) and only modified content_main.xml by adding a ScrollView and lots of lorem ipsum so that there was something to scroll:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut venenatis vulputate urna, ac tempor est laoreet ac. Ut vitae auctor risus, sit amet iaculis est. Vestibulum vitae velit eget lorem laoreet aliquet. Praesent non suscipit odio, in viverra nisl. Mauris pharetra turpis lorem, ac ultricies lacus sagittis et. Praesent quis dapibus quam. Sed commodo leo ac ornare mollis. Cras sollicitudin magna risus, quis ullamcorper neque ultricies non. Aliquam dapibus ullamcorper lorem, et mattis sem tristique ut. Nam faucibus pharetra metus nec rhoncus. Quisque aliquet id odio in sodales. Suspendisse venenatis arcu eu imperdiet dictum.

    Sed elementum sem massa, dignissim egestas mauris faucibus in. Suspendisse potenti. Sed ac facilisis tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed gravida ex eget nibh faucibus, ac volutpat nulla gravida. Vestibulum placerat vel urna ac pellentesque. Pellentesque porta orci leo, nec commodo tortor luctus quis. Suspendisse non metus sit amet mi congue hendrerit.

    Vivamus ex metus, vestibulum quis vulputate ac, tincidunt nec enim. Fusce vitae ligula eros. Nunc ut gravida odio. Praesent ultrices massa in purus sodales, quis gravida lectus consectetur. Curabitur quis dignissim sem. Proin posuere facilisis nisl, vulputate ultrices mi tempor non. Integer tristique efficitur urna, at lobortis dolor rutrum eu. Donec vel sem pretium, commodo velit quis, hendrerit quam. Cras hendrerit iaculis augue, ut vestibulum arcu aliquam ut. In suscipit et enim condimentum convallis. In vitae nisi quis felis tristique rutrum sed elementum eros. Curabitur lobortis porttitor interdum. Donec elementum tempus est, sed ultricies est tempus eu. Proin laoreet, turpis sodales finibus ultrices, odio est efficitur ex, eget convallis mauris ipsum sed nunc.

    Duis sodales tempor volutpat. Nulla laoreet condimentum aliquam. Sed lacinia molestie eros vel imperdiet. Donec mollis tempor enim, vitae pellentesque odio vestibulum ac. In maximus hendrerit enim, eu bibendum urna interdum sed. Praesent condimentum sit amet turpis ut suscipit. In a condimentum odio. Duis metus metus, sagittis et faucibus a, elementum sit amet elit. Duis sit amet auctor odio.

    Nullam vitae dictum est. Nunc suscipit, lectus sit amet blandit posuere, arcu dolor porttitor dolor, et volutpat tortor tortor sed leo. Nulla facilisi. Curabitur vestibulum vestibulum ipsum, ut iaculis mi luctus placerat. Sed lobortis eu nisi eget ultrices. Pellentesque efficitur mi non massa condimentum aliquet. Ut ac dolor eget dolor accumsan scelerisque pharetra non erat. Nullam semper molestie ultrices. Nunc et auctor turpis. Nullam fermentum dolor eu mi pellentesque finibus. Vestibulum eleifend varius maximus. Donec id bibendum arcu. Curabitur lacinia lorem sed ex blandit, in lacinia orci tempus. Ut bibendum luctus consectetur. Mauris sed rutrum nisi. Cras facilisis nibh sed consequat facilisis." android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </ScrollView>
</RelativeLayout>

The result, as you can see, hides some content behind the button:

在此处输入图片说明

What is the canonical way to fix this problem?

You can do this trick. I done it for your it will 100% work

Set an ID for ScrollView like this

    <ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/sv">

Then Create a object and set Listener to that like this in your Activity Calss

FloatingActionButton fab;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    fab = (FloatingActionButton) findViewById(R.id.fab);
    ScrollView sv = (ScrollView) findViewById(R.id.sv);

    sv.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
                // Do what you want
                fab.setVisibility(View.INVISIBLE);
                return true;
            }else if(motionEvent.getAction() == MotionEvent.ACTION_UP){
                // Do what you want
                fab.setVisibility(View.VISIBLE);
                return true;
            }

            return false;
        }
    });
}

When you scroll it will hide the button and when you don't scroll it will visible ...

更改您的TextView frm XML文件的Height参数。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM