gpt4 book ai didi

android - 设置 View 以在可用空间中扩展到最大大小

转载 作者:行者123 更新时间:2023-12-02 13:28:33 24 4
gpt4 key购买 nike

我有一个带有水平 recyclerview 的应用程序,它显示一个方形图像,在图像的底角有一个覆盖的 handle 和按钮(通过约束布局控制)。
由于显示的图像都是 svg 图形,我希望这些图像中的每一个都可以扩展以填充可用的垂直空间。但是在一些大屏幕上,我发现有足够的空间让图像被放大到过大的尺寸,因此屏幕上只显示一两个。
我想要的是对回收器 View 中的每个图像进行缩放以将空间填充到最大尺寸,例如 120dp。我试图通过覆盖 onMeasure 的自定义 ImageView 来实现这一点:

class ComponentImageView : AppCompatImageView {
constructor(context: Context?) : super(context) {}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)

var size = 0
val width = measuredWidth
val height = measuredHeight
val heightWithoutPadding = height - paddingTop - paddingBottom

// set the dimensions
size = heightWithoutPadding

var dp = (size / resources.displayMetrics.density + 0.5f)
if(dp > 120) {dp = 120f}
val px : Int = (dp * resources.displayMetrics.density + 0.5f).toInt()

setMeasuredDimension(px + paddingLeft + paddingRight, px + paddingTop + paddingBottom)
}
}
并像这样在xml中使用它:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content" android:layout_height="match_parent">

<bw.graph.ComponentImageView
android:id="@+id/component_block_image"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<bw.smith.TouchableImageView
android:id="@+id/component_block_handle"
style="@style/ComponentListIcon"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/component_block_image"
app:srcCompat="@drawable/ic_drag_handle_gray_24dp" />

<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/component_block_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/component_block_edit"
style="@style/ComponentListIcon"
app:layout_constraintStart_toStartOf="@id/component_block_image"
app:layout_constraintBottom_toBottomOf="@id/component_block_image"
app:srcCompat="@drawable/ic_edit_gray_24dp" />

</androidx.constraintlayout.widget.ConstraintLayout>
虽然图像最终是正确的宽度,但 View 本身仍会填充所有垂直高度。所以结果是图像以可用的垂直高度为中心,并且打算被覆盖的 handle 和按钮似乎漂浮在远离图像的位置。
有没有办法实现我想要的?如果我只是手动将 android:layout_height 属性设置为所需的 dp(例如,在 48dp 和 120dp 之间)它看起来不错,我只想找到一种方法在 xml 中或以编程方式设置它,以便它在不同的屏幕上看起来不错我不得不担心。

最佳答案

ConstraintLayout通过 app:layout_constraintHeight_max 开箱即用地支持此功能属性。将这些添加到您想要拉伸(stretch)的 View 中:

android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_max="[your value here]"
请注意,当父级高于给定的最大值时, View 将在父级内(垂直)居中,除非您添加偏差:
app:layout_constraintVertical_bias="[0 - 1]"
0 的偏差值将 View 固定到屏幕顶部,而 1将其固定到底部。如果要调整位置,可以使用任何小数值(例如, 0.33 使其位于屏幕顶部的三分之一处)。
在 View 不受最大值限制的情况下,此偏差值将不起作用。

关于android - 设置 View 以在可用空间中扩展到最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62764003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com