web-dev-qa-db-ja.com

NestedScrollViewおよびWebViewの高さの問題

新しい_Android.support.v4.widget.NestedScrollView_を使用していて、問題に直面しました。

これが私のレイアウトです:

_<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="250dp">

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.7">

             <!-- some views inside -->

        </RelativeLayout>

        <Android.support.v7.widget.Toolbar
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin"
            />

    </Android.support.design.widget.CollapsingToolbarLayout>

    </Android.support.design.widget.AppBarLayout>

    <Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    >

    <WebView
        Android:id="@+id/content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"/>

</Android.support.v4.widget.NestedScrollView>
_

TextView内にhtmlをロードする必要があるため、次のようにします。

content.setText(Html.fromHtml(htmlString));

そして、それは奇妙に見えます。画面下部に配置したテキストビュー。 initial state

テキストをスワイプした後、通常のように見えます。 after swipe

そして、textviewはこれらの問題のあるビューだけではないと思います。 webviewを使用してみましたが、コンテンツも表示されません(高さの計算が正しくないためと思います)。したがって、NestedScrollViewでの作業を修正するには、webviewまたはtextviewが必要です。

追伸dpでテキストビューの高さを設定すると、テキストは正しく見えますが、高さには_wrap_content_が必要です。

更新08.07.15

最後に、WebViewを使用する必要があります。 Alex Facciorussoの回答は部分的に機能しますが、別の問題に直面しました。 WebViewコンテンツに特定の高さがある場合、コンテンツの一部は表示されますが、下にスクロールできません。例: enter image description here

17
IlyaEremin

Mayur Ra​​iyaniが言ったように:この問題はサポートライブラリバージョン22.2.1で解決されています: code.google.com/p/Android/issues/detail?id=175234 。答えてくれてありがとう。

1
IlyaEremin

たくさんの投稿を読んだり、WebViewのカスタム実装も読んだりしましたが、私は属性の実験に熱心で、何がうまくいくかを見つけました。これは次のとおりです。

NestedScrollViewの属性を使用

Android:fillViewport="true"

基になるWebViewについては、高さをラップとして使用していることを確認してください

<WebView
    Android:id="@+id/webview"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">
</WebView>

あなたが持っている疑似コードとして

<NestedScrollView> // height=  match_parent

 <Parent_layout>//could be Realtive/Linear with height= match_parent
   <Some_View></Some_View>
   <Some_View></Some_View>

   <WebView></WebView> // height=  wrap_content
 </Parent_layout>

</NestedScrollView>
4
sud007

簡単な回避策は、LinearLayout内のTextViewの下に500dpの高さの空のビューを追加することです。そのビューは、TextViewを正しい位置に押し上げます。

<Android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

<!-- Your scrolling content -->

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:text="@string/random_text" />

    <View
        Android:layout_width="match_parent"
        Android:layout_height="500dp"/>


</LinearLayout>
3

回避策を見つけました:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
    Android:id="@+id/main_content"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.v4.widget.NestedScrollView
        Android:id="@+id/nestedScrollView"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <FrameLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:minHeight="300dp">

            <WebView
                Android:id="@+id/webview"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent" />
        </FrameLayout>

    </Android.support.v4.widget.NestedScrollView>

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="256dp"
        Android:fitsSystemWindows="true"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapsingToolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
        </Android.support.design.widget.CollapsingToolbarLayout>
    </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

500dpのminHeightをNestedScrollViewに追加すると、WebViewがレイアウトのすべての高さにフィットし、折りたたみツールバーが機能します。

[〜#〜] updated [〜#〜]:WebViewをFrameLayoutでラップし、それにminHeightを追加しました。

1

これはバグです。sdkを更新し、build.gradleの「compile 'com.Android.support:design:22.2.0'」を「compile 'com.Android.support:design:22.2.1'」に置き換えてください。それは私の仕事です。

0
dhn conan

frameLayoutでWebViewをラップし、それにView(Android:layout_height = "800dp")をWebView'minHeightとして追加しました。

0
Sanpark