Давайте ещё раз внимательно посмотрим на наше приложение. Особенно на прокрутку списка твитов. Очень странно выглядит, что наш верхний блок с информацией
о пользователе всегда остаётся на месте, закрывая при этом основную часть экрана. Давайте исправим это.
Вот как выглядит прокрутка списка сейчас:
Для того чтобы это исправить, будем использовать контейнер NestedScrollView, т.к. мы хотим чтобы наш верхний блок также прокручивался, чтобы не занимать
рабочую область экрана. Давайте изменим наш activity_user_info.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"style="@style/Toolbar"/><android.support.v4.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="8dp"><!-- информация о пользователе не изменилась --></RelativeLayout><Viewandroid:id="@+id/delimeter_view"android:layout_width="match_parent"android:layout_height="6dp"android:layout_marginTop="@dimen/text_small_margin"android:background="@color/gray_mercury"/><android.support.v7.widget.RecyclerViewandroid:id="@+id/tweets_recycler_view"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout></android.support.v4.widget.NestedScrollView></LinearLayout>
Видим, что мы просто обернули всю нашу информацию в два новых контейнера: NestedSrollView и LinearLayout. Мы могли бы использовать только NestedScrollView, но у него есть одно ограничение: он должен содержать только один вложенный элемент. Именно поэтому нам пришлось обернуть всю нашу информацию в LinearlLayout. Всё это необходимо сделать, чтобы прокручивался весь наш экран, а не только список твитов. Теперь наш экран выглядит так, как нужно:
Осталось пару нюансов:
Наш список сейчас прокручивается не плавно.
Мы забыли добавить разделители между элементами списка.
Чтобы список прокручивался плавно, нам нужно запретить его внутреннее прокручивание, т.к. NestedScrollView берёт на себя эту функцию. Для этого можем использовать метод ViewCompat.setNestedScrollingEnabled(tweetsRecyclerView, false);.
Для того чтобы добавить разделители между элементами списка, необходимо добавить к RecyclerView стандартный ItemDecoration. Именно так и осуществляется добавление разделителей в список.
Выглядит вызов так: tweetsRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
После добавления этих изменений код выглядит так:
UserInfoActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
publicclassUserInfoActivityextends AppCompatActivity {// Остальной код выше не изменилсяprivatevoidinitRecyclerView(){
tweetsRecyclerView = findViewById(R.id.tweets_recycler_view);
ViewCompat.setNestedScrollingEnabled(tweetsRecyclerView,false);
tweetsRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
tweetsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
tweetAdapter =new TweetAdapter();
tweetsRecyclerView.setAdapter(tweetAdapter);}// Остальной код ниже не изменился}
Видим, что разделители между элементами действительно добавились, и список начал прокручиваться плавно:
Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для
продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.
Структура урока:
Улучшение UI поведения
Улучшение UI поведения
Давайте ещё раз внимательно посмотрим на наше приложение. Особенно на прокрутку списка твитов. Очень странно выглядит, что наш верхний блок с информацией
о пользователе всегда остаётся на месте, закрывая при этом основную часть экрана. Давайте исправим это.
Вот как выглядит прокрутка списка сейчас:
Для того чтобы это исправить, будем использовать контейнер
NestedScrollView
, т.к. мы хотим чтобы наш верхний блок также прокручивался, чтобы не заниматьрабочую область экрана. Давайте изменим наш
activity_user_info.xml
:activity_user_info.xml
Видим, что мы просто обернули всю нашу информацию в два новых контейнера:
NestedSrollView
иLinearLayout
. Мы могли бы использовать толькоNestedScrollView
, но у него есть одно ограничение: он должен содержать только один вложенный элемент. Именно поэтому нам пришлось обернуть всю нашу информацию вLinearlLayout
. Всё это необходимо сделать, чтобы прокручивался весь наш экран, а не только список твитов. Теперь наш экран выглядит так, как нужно:Осталось пару нюансов:
Наш список сейчас прокручивается не плавно.
Мы забыли добавить разделители между элементами списка.
Чтобы список прокручивался плавно, нам нужно запретить его внутреннее прокручивание, т.к.
NestedScrollView
берёт на себя эту функцию. Для этого можем использовать методViewCompat.setNestedScrollingEnabled(tweetsRecyclerView, false);
.Для того чтобы добавить разделители между элементами списка, необходимо добавить к
RecyclerView
стандартныйItemDecoration
. Именно так и осуществляется добавление разделителей в список.Выглядит вызов так:
tweetsRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
После добавления этих изменений код выглядит так:
UserInfoActivity.java
Видим, что разделители между элементами действительно добавились, и список начал прокручиваться плавно:
Полный листинг кода:
UserInfoActivity.java
activity_user_info.xml
Подведём итоги:
Полезные материалы: