Автоматически Скрывать Адресную Строку «Как В Chrome»

Добрый день, сегодня напишем автоматическое скрытие адресной строки при прокрутке, по типу хрома.

Схема называется быстрым возвратом и используется для экономии вертикального пространства.

Если интересно, добро пожаловать под кат Для начала у нас будет RelativeLayout для активности, WebView для нее и RelativeLayout для скрытой панели.

  
  
  
  
   

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " xmlns:tools="http://schemas.android.com/tools " android:layout_width="match_parent " android:layout_height="match_parent " android:background="#0099cc " android:id="@+id/rl " tools:context="ru.terra.jbrss.MainActivity "> <WebView android:id="@+id/wvMain " android:layout_width="match_parent " android:layout_height="match_parent " android:layout_alignParentBottom="true"/ > <RelativeLayout android:id="@+id/actionBar " android:layout_width="match_parent " android:layout_height="50dp "> <TextView android:id="@+id/tvUrl " android:layout_width="wrap_content " android:layout_height="wrap_content " android:layout_centerInParent="true " android:text="url here"/> </RelativeLayout> </RelativeLayout>

В коде MainActivity: настроить переменные

private WebView webView; private View actionBar; private int baseHeight; private int webViewOnTouchHeight; private int barHeight; private float heightChange; private float startEventY; private View layout; private TextView tvUrl;

создайте свой собственный сенсорный прослушиватель

private View.OnTouchListener listener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: startEventY = event.getY(); heightChange = 0; webViewOnTouchHeight = webView.getLayoutParams().

height; break; case MotionEvent.ACTION_MOVE: float delta = (event.getY() + heightChange) - startEventY; boolean heigthChanged = resizeView(delta); if (heigthChanged) { actionBar.setTranslationY(baseHeight - webView.getLayoutParams().

height - barHeight); } } return false; } };

прописываем поиск всех этих элементов в методе onCreate, добавляем наш прослушиватель касаний для веб-просмотра и вычисляем высоты

actionBar = findViewById(R.id.actionBar); layout = findViewById(R.id.rl); tvUrl = (TextView) findViewById(R.id.tvUrl); webView = (WebView) findViewById(R.id.wvMain); webView.setOnTouchListener(listener); webView.post(new Runnable() { @Override public void run() { barHeight = actionBar.getMeasuredHeight(); baseHeight = layout.getMeasuredHeight(); webView.getLayoutParams().

height = webView.getMeasuredHeight() - barHeight; webView.requestLayout(); } });

а теперь самый важный код, который будет изменять размер веб-просмотра и макет адресной строки.



private boolean resizeView(float delta) { heightChange = delta; int newHeight = (int) (webViewOnTouchHeight - delta); if (newHeight > baseHeight) { // scroll over top if (webView.getLayoutParams().

height < baseHeight) { webView.getLayoutParams().

height = baseHeight; webView.requestLayout(); return true; } } else if (newHeight < baseHeight - barHeight) { // scroll below bar if (webView.getLayoutParams().

height > baseHeight - barHeight) { webView.getLayoutParams().

height = baseHeight - barHeight; webView.requestLayout(); return true; } } else { // scroll between top and bar webView.getLayoutParams().

height = (int) (webViewOnTouchHeight - delta); webView.requestLayout(); return true; } return false; }

скриншоты на примере моей RSS-ридера перед прокруткой

Автоматически скрывать адресную строку «как в Chrome»

после прокрутки

Автоматически скрывать адресную строку «как в Chrome»

Теги: #Android #быстрый возврат #разработка Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.