簡體   English   中英

如何根據布局高度以編程方式更改視圖高度

[英]how to change a view height programmatically based on a layout height

我正在開發一個應用程序,我需要創建一種看起來像儀表的瓷磚。 所以基本上,我創建了一個簡單的 xml 文件。 使用我需要的布局和所有視圖,如下所示:

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/tile_layout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_columnWeight="1"
        android:background="@color/transparent">

        <View
            android:id="@+id/gauge"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible"/>
...

在片段中,我正在做:

        val layout: ConstraintLayout = view.findViewById(R.id.tile_layout)
        val gauge = view.findViewById<View>(R.id.gauge)
        val ratio = 75


        view.layoutParams = getParams()
        val newParams: ViewGroup.LayoutParams = gauge.layoutParams
        newParams.height = (layout.height * ratio / 100)
        gauge.setLayoutParams(newParams)

它不起作用,高度仍然相同。 我希望儀表視圖高度約為布局高度的 75%。

知道怎么做嗎?

我認為您需要通過添加OnGlobalLayoutListener來完全創建布局時獲得高度; 然后使用layout.measuredHeight而不是layout.height

val layout: ConstraintLayout = view.findViewById(R.id.tile_layout)
val gauge = view.findViewById<View>(R.id.gauge)

layout.viewTreeObserver.addOnGlobalLayoutListener(object :
    ViewTreeObserver.OnGlobalLayoutListener {
    override fun onGlobalLayout() {

        val ratio = 75
        view.layoutParams = getParams()
        val newParams: ViewGroup.LayoutParams = gauge.layoutParams
        newParams.height = (layout.measuredHeight * ratio / 100)
        gauge.layoutParams = newParams
        layout.viewTreeObserver.removeOnGlobalLayoutListener(this)
    }

})

Zain 所說的可能是正確的,但是您沒有顯示足夠的代碼來知道這是否正確。 我會說您的儀表視圖沒有設置約束,並且約束是ConstraintLayout的每個直接子級都應該具有的,並且match_parent是無效的。 請參閱ConstraintLayout的文檔。

重要提示:不建議將 MATCH_PARENT 用於 ConstraintLayout 中包含的小部件。 類似的行為可以通過使用 MATCH_CONSTRAINT 來定義,並將相應的左/右或上/下約束設置為“父級”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM