Добавить представление нижнего колонтитула в webview

У меня есть WebView и собственный пользовательский вид, который я хочу добавить под WebView . Я пробовал обернуть WebView внутри ScrollView , и, хотя это делает именно то, что я хочу, производительность прокрутки очень отсталая, и если пользователь бросает свиток, нажатие на экран не останавливает всплывающее окно, как должно.

Другой подход, о котором я думал, WebView в том, чтобы раздуть WebView в оболочку FrameLayout с представлением FrameLayout колонтитула поверх WebView , а затем каким-то образом расширить высоту WebView чтобы разместить размер WebView колонтитула, переместить нижний колонтитул в конец высоты WebView и Затем просмотрите прокрутку WebView чтобы переместить нижний колонтитул вместе с ним.

Я установил базовый класс, моя проблема заключается в расширении прокручиваемого содержимого в WebView , а затем WebView колонтитула на нижнюю часть содержимого WebView ; Основная проблема заключается в том, что WebView не является вашим типичным видом Android, а содержимое страницы загружается асинхронно (и, следовательно, изменяется размер контента).

Как расширить прокручиваемое содержимое WebView ? И как я могу установить нижний колонтитул ниже содержимого WebView ?

РЕДАКТИРОВАТЬ:

Я фактически не использую xml, представление построено в коде так:

 public class WebViewWithFooter extends FrameLayout { private ObservableWebView mWebView;//webview with scroll methods overridden for access private FrameLayout mFooterContainer; public WebViewWithFooter(Context context) { super(context); init(); } public WebViewWithFooter(Context context, AttributeSet attrs) { super(context, attrs); init(); } public WebViewWithFooter(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public WebViewWithFooter(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } private void init() { FrameLayout.LayoutParams footerParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); FrameLayout.LayoutParams webviewParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); mWebView = new ObservableWebView(getContext()); mFooterContainer = new FrameLayout(getContext()); addView(mWebView, webviewParams); addView(mFooterContainer, footerParams); } } 

Оберните простой Webview с нижним колонтитулом ( LinearLayout , RelativeLayout и т. Д.) Внутри ObservableScrollView , а не ObservableWebView . Я не могу вдаваться в детали, так как вы не добавили никаких файлов макета.

EDIT :

Activity.xml :

 <LinearLayout android:layout_width="match parent" android:layout_height="match parent" android:orientation="vertical"> <com.github.ksoichiro.android.observablescrollview.ObservableScrollView android:id="@+id/viewObj" android:layout_width="match parent" android:layout_height="wrap_content"> <!-- Webview and footer programatically added here --> </com.github.ksoichiro.android.observablescrollview.ObservableScrollView </LinearLayout> 

Activity.java :

 FrameLayout.LayoutParams footerParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); FrameLayout.LayoutParams webviewParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); mWebView = new WebView(getContext()); mFooterContainer = new FrameLayout(getContext()); mObservableScrollView = (ObservableScrollView) findViewbyId(R.id.viewObj); mObservableScrollView.addView(mWebView, webviewParams); mObservableScrollView.addView(mFooterContainer, footerParams); 

Я достиг этого с помощью кода макета xml следующим образом:

  <TextView android:id="@+id/about_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:textAppearanceMedium" /> <TextView android:id="@+id/readme_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/changelog_text" /> <WebView android:id="@+id/readme_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:scrollbarAlwaysDrawVerticalTrack="true" android:scrollbars="vertical" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_gravity="center_horizontal" android:orientation="horizontal"> <FrameLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_weight="0.5" /> <cu.tellistico.ImageButtonText android:id="@+id/btn_gift" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:contentDescription="@string/btn_donate_info" custom:buttonBackground="@drawable/states_orange" android:src="@drawable/ic_gift" android:text="Donar" android:textColor="@color/text_orange" /> <FrameLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_weight="0.5"/> </LinearLayout> </LinearLayout> 

Ниже синего текста есть прокручиваемый веб-просмотр и нижний колонтитул. Это действительно для вас?

Если я правильно понял, вы пытаетесь показать / скрыть нижний колонтитул, когда прокручивается WebView , правильно? Если это так, я не думаю, что для этого вам нужна библиотека сторонних разработчиков. Вы можете расширить WebView и переопределить метод onScrollChanged() . Он вызывается при изменении горизонтальной или вертикальной прокрутки. Если вертикальная прокрутка изменилась и она положительная, покажите нижний колонтитул, иначе – скройте ее.

Еще одна идея: попробовали ли вы новую библиотеку дизайна, отправленную Google? Существует удобный способ добиться такого поведения для ListView или RecyclerView .

Исправьте меня, если я ошибаюсь, но в основном вы хотите, чтобы нижний колонтитул отображался внизу страницы, а ваш веб-просмотр занимал все пространство, которое осталось?

Почему бы вам просто не поместить представление нижнего колонтитула в RelativeLayout с установленным значением alignParentBottom равным true, а ваш WebView будет выше вашего пользовательского представления, с высотой, установленной в matchParent?