RelativeLayout内ScrollView的Wrap_Content生成空白空间

时间:2019-05-19 12:28:00

标签: android scrollview relativelayout

背景

我有一个带有RelativeLayout父级的BottomSheetDialog。我有一个ScrollView子级,在某些视图下拥有一个TextView,在ScrollView下有一个底部TextView。我需要根据其持有的文本大小将ScrollView转换为Wrap_Content,并将Bottom TextView保留在ScrollView下方的父底部。 当ScrollView内容很大时,没有问题。但是,当内容较小时,将按照图片中的说明在内容和底部TextView之间生成间隙/空白。

我尝试过的事情:

如果我使用LinearLayout父级,并且当ScrollView的内容足够大以占据整个屏幕时,它只会隐藏Bottom TextView。 如果我不在ScrollView中使用layout_above参数,则当内容较大时,它将仅隐藏Bottom TextView。 如果我为底部TextView删除alignParentBottom,则当ScrollView的内容较大时,它只会被隐藏。

我需要什么

我要删除所附图像中提到的ScrollView和TextView之间的空白区域。

我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/pub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:ellipsize="end"
        android:fontFamily="sans-serif-black"
        android:gravity="start|center"
        android:maxLines="1"
        android:padding="16dp"

        android:textIsSelectable="true"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/pub"
        android:autoLink="web"
        android:ellipsize="end"
        android:fontFamily="sans-serif-black"
        android:gravity="left"
        android:maxLines="4"
        android:padding="16dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/s_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title_text"
        android:ellipsize="end"
        android:fontFamily="sans-serif-condensed"
        android:gravity="left|center"
        android:maxLines="2"
        android:padding="16dp"
        android:text=""
        android:textAppearance="@style/TextAppearance.AppCompat.Title"
        android:textSize="16sp"
        android:textStyle="normal" />

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/downloaded_file_name"
        android:layout_below="@id/s_text"
        android:fillViewport="true">

        <TextView
            android:id="@+id/desc_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="web"
            android:gravity="left"
            android:padding="16dp"
            android:scrollbars="vertical"
            android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
            android:textColor="@color/colorPrimaryText"
            android:textSize="14sp" />
    </ScrollView>

    <TextView
        android:id="@+id/downloaded_file_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="end|bottom"
        android:padding="6dp"
        android:textIsSelectable="true"
        android:textSize="10sp" />
</RelativeLayout>

Empty space between ScrollView and TextView enter image description here

1 个答案:

答案 0 :(得分:0)

Android does not support justify ,To justify text in android use WebView

 WebView view = new WebView(this);
    view.setVerticalScrollBarEnabled(false);

    ((LinearLayout)findViewById(R.id.inset_web_view)).addView(view);

    view.loadData(getString(R.string.hello), "text/html; charset=utf-8", "utf-8");
and html code

<string name="hello">
<![CDATA[
<html>
 <head></head>
 <body style="text-align:justify;color:gray;background-color:black;">
  Lorem ipsum dolor sit amet, consectetur 
  adipiscing elit. Nunc pellentesque, urna
  nec hendrerit pellentesque, risus massa
 </body>
</html>
]]>
</string>
EDIT: to set Background transparent in it, use:

webView.setBackgroundColor(0x00000000); 
if (Build.VERSION.SDK_INT >= 11) webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

this.wv.setWebViewClient(new WebViewClient() { 

@Override public void onPageFinished(WebView view, String url) {                
      view.setBackgroundColor(0x00000000); if (Build.VERSION.SDK_INT >= 11) 
      view.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); } });