Автоматическое скрытие адресной строки «как в хроме»

Добрый день, сегодня мы будем писать автоматическое скрытие адресной строки при прокрутке, chrome-like. Паттерн называется quick return, используется для экономии вертикального пространства. Если интересно, добро пожаловать под катДля начала на activity у нас будет RelativeLayout и WebView на нём и 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; создаём свой touch listener 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, добавляем для webview наш touch listener и вычисляем высоты

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 (); } }); , а теперь самый главный код, который будет изменять размер webview и layout с адресной строкой

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до прокруткиimageпосле прокруткиimage

© Habrahabr.ru