Как соответствовать размеру высоты WebView с высотой экрана? - PullRequest
1 голос
/ 10 октября 2011

Если мой WebView такой большой, у меня нет проблем, и высота WebView соответствует высоте экрана, даже когда контент настолько большой, что я могу прокручивать содержимое WebView. Но если содержимое WebView мало, высота WebView не умещается на экране.

Это мой макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<ScrollView android:layout_width="fill_parent"
    android:layout_height="fill_parent"
        android:fitsSystemWindows="true">

    <WebView android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fitsSystemWindows="true" />

</ScrollView>

<LinearLayout android:id="@+id/media_player"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="visible">

    <Button android:textStyle="bold"
        android:id="@+id/ButtonPlayStop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:drawable/ic_media_play" />

    <SeekBar android:id="@+id/SeekBar"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_below="@id/ButtonPlayStop" />

</LinearLayout>

Вот скриншот:

enter image description here

Кто-нибудь может помочь мне решить эту проблему?

1 Ответ

8 голосов
/ 11 октября 2011

Вам не нужно помещать WebView внутри ScrollView, поскольку он уже знает, как прокручивать, когда его содержимое превышает границы его просмотра.Размещение прокручиваемых представлений внутри других прокручиваемых представлений имеет тенденцию приводить к нежелательному поведению.

Несмотря на то, что в течение секунды ScrollView не будет растягиваться, занимая дополнительное пустое пространство, если его содержимое слишком мало.То есть, если не используется специальный флаг ( android: fillViewport ).

В качестве решения я бы удалил внешний ScrollView и попытался бы заставить WebView занятьпространство само по себе.Если вы используете RelativeLayout в качестве контейнера, вы можете получить этот макет только с одним уровнем глубины:

  • кнопка воспроизведения переходит в нижний левый угол родительского элемента
  • панель поиска переходит квнизу и справа от кнопки воспроизведения
  • WebView находится над ними с fill_parent по ширине и высоте

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <Button android:textStyle="bold"
    android:id="@+id/ButtonPlayStop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@android:drawable/ic_media_play" />
    
    <SeekBar android:id="@+id/SeekBar"
    android:layout_toRightOf="@+id/ButtonPlayStop"
    android:layout_alignParentBottom="true"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_below="@id/ButtonPlayStop" />
    
    <WebView android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/ButtonPlayStop" />
    
    </RelativeLayout>
    
...