Ответ 1
Как сказал Маюр Райяни: эта проблема решена в библиотеке поддержки 22.2.1: code.google.com/p/android/issues/detail?id=175234. Спасибо всем за ответы.
Я использую новый 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>
Мне нужно загрузить html внутри textView, поэтому я делаю:
content.setText(Html.fromHtml(htmlString));
И это выглядит странно. Мое текстовое изображение расположено в нижней части экрана.
После того, как я прокручу текст, он начинает выглядеть нормально.
И я думаю, что textview - это не только просмотр этой проблемы.
Я пробовал использовать webview, но даже не показывал контент (я думаю, из-за неправильного вычисления высоты).
Поэтому мне нужно webview или textview для исправления работы с NestedScrollView
.
P.S. Если я устанавливаю высоту текста в dp
, тогда текст выглядит правильно, но мне нужно wrap_content
для высоты.
Наконец, мне нужно использовать WebView
. Ответ Alex Facciorusso частично работает, но я столкнулся с другой проблемой. Когда содержание WebView
имеет определенную высоту, я вижу часть содержимого, но я не могу прокрутить вниз.
Пример:
Как сказал Маюр Райяни: эта проблема решена в библиотеке поддержки 22.2.1: code.google.com/p/android/issues/detail?id=175234. Спасибо всем за ответы.
Прочитайте много постов, а также пользовательскую реализацию 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>
Простым обходным решением будет добавить пустой вид с высотой 500dp ниже вашего TextView внутри вашего LinearLayout. Этот вид должен поднять ваш 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>
Я нашел обходное решение:
<?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>
Я добавил minHeight из 500dp в NestedScrollView, и теперь WebView подгоняет всю высоту макета, и работает сворачиваемая панель инструментов.
ОБНОВЛЕНО: завернутый WebView с помощью FrameLayout и добавленный к нему minHeight.
завернул WebView с помощью FrameLayout и добавил View (android: layout_height = "800dp" ) в качестве WebView'minHeight к нему.
Это ошибка, обновите файл sdk, замените команду "compile" com.android.support:design:22.2.0 "" на "compile" com.android.support:design:22.2.1 '"в build.gradle, Это работает для меня.
добавление android:layout_gravity="fill_vertical"
в NestedScrollView решит вашу проблему
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_gravity="fill_vertical"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp" />
</android.support.v4.widget.NestedScrollView>