1. 程式人生 > >Android中豎線隨內容高度變化而變化的問題和解決辦法

Android中豎線隨內容高度變化而變化的問題和解決辦法

專案中要求顯示豎線,並且豎線高度不確定,豎線的高度要隨著內容的變化而變化。不能使用match_parent 充滿,也不能在佈局中寫死,此時使用

android:layout_height="wrap_content"

將不起作用,反而會充滿整個螢幕。我在網上搜索了一番,關於這個問題只找到了這樣一篇文章 https://blog.csdn.net/gufengpiaoyi/article/details/50129355 ,但是並沒有解決實際遇到的問題。經過幾天之後想到了一個辦法解決了使用<View>作豎線高度動態變化的問題。

解決辦法:在豎線的外層套一個父佈局RelativeLayout,並且隨豎線一起變化的元件同樣巢狀在RelativeLayout

中,這是最關鍵的一步。將豎線<View>任意賦值,然後利用相對佈局的特性layout_alignBottomlayout_alignTop 來強行設定豎線的上限和下限,這樣就解決了高度動態變化的問題。具體使用的例項如下。

1、靜態:XML中使用

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:id="@+id/total_layout"
android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorWhite"> <View android:id="@+id/verticaline" android:layout_width="1dp" android:layout_height="@dimen/y10" android:layout_marginLeft
="@dimen/x38" android:layout_alignBottom="@+id/web" android:layout_alignParentTop="true" android:background="@color/colorDivide"/> <TextView android:id="@+id/tv_conversationContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/x72" android:layout_marginTop="@dimen/y24" android:layout_marginRight="@dimen/x88" android:textColor="#464646" android:textSize="@dimen/y38" /> <WebView android:id="@+id/web" android:layout_width="wrap_content" android:layout_height="wrap_content android:layout_below="@+id/tv_conversationContent" android:layout_marginRight="@dimen/x88" android:layout_marginLeft="@dimen/x60" android:layout_marginTop="@dimen/y24" /> </RelativeLayout> </layout>

上面的佈局是Recyclerview的item的佈局,在佈局中id為verticaline 的View是要顯示的豎線,TextViewWebView負責顯示從伺服器獲取的資料,資料內容、高度不確定。這裡要求豎線的高度隨著TextViewWebView的內容高度變化而變化。所以這裡豎線設定的下限是WebView底部,通過layout_alignParentTop的方式讓豎線的上限直接置頂。具體請看上述佈局中斜體加粗部分。

2、java程式碼中動態設定

 RelativeLayout.LayoutParams layoutParams= (RelativeLayout.LayoutParams) binding.verticaline.getLayoutParams();
 layoutParams.addRule(RelativeLayout.ALIGN_BOTTOM,binding.web.getId());

其中binding.web代表這上面xml中的WebView,binding.verticaline代表上面xml中的豎線View。通過這樣一個辦法的設定就限定了豎線高度View的下限是web為底,與上面xml中豎線的效果相同。同理,通過這樣的程式碼還可以設定豎線高度的上限,具體請參照addRule的方法,這個在網上很容易就能查到。

結束語:網上關於View豎線高度問題解決的方式少之又少。希望這個方法能夠幫助到您,有什麼疑問可以在下面的評論區留言,我能及時看到。但是如果您是幾年後看到的這篇文章,那我就不能確保能夠及時回覆了。