2015-07-06 4 views
9

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

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

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

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

EDIT:

Я на самом деле не использовать 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); 
} 
} 
+0

Вы могли бы показать свой xml-макет? – eduyayo

+0

отредактировал код выше с моим классом (там нет xml, поскольку он сконструирован в коде) – AndroidNoob

+0

возможно, вы можете рассмотреть возможность создания своей пользовательской группы просмотра, задачей которой является компоновка веб-представления и нижнего колонтитула. Я чувствую, что если вы хотите точно контролировать то, как вы описали, лучше всего сделать макет самостоятельно. –

ответ

5

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

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

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); 
+0

Если вы правильно прочитали вопрос, вы бы уже видели, что я уже пробовал и тестировал обертывание webview и footer в scrollview, и, хотя он работает, производительность прокрутки очень отсталая, поэтому мой запрос на другой подход – AndroidNoob

+0

Да, я увидел, что , Из частичного кода я понял, что вы используете ObservableWebView и добавляете обратные вызовы. Вместо этого добавьте обратные вызовы в ObservableScrollView. – prakharsingh95

3

Я достиг этого с помощью макета код 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 и кнопка сноска. Это действительно для вас?

0

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

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

0

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

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

Смежные вопросы