繁体   English   中英

为什么 view.height 比实际高度大 3 倍?

[英]Why view.height is 3 times bigger than actual height?

我有一个高度设置为 120dp 的 ImageView。 当我得到 view.height 时,它等于 360,为什么它不等于 120?

我不确定代码不会有帮助,但是:

    <ImageView
        android:id="@+id/profilePic1"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:scaleType="centerCrop"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:clickable="true"
        app:srcCompat="@drawable/profile_pic1"/>

活动:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val layoutInflater: LayoutInflater = LayoutInflater.from(this)
    val view: View = layoutInflater.inflate(R.layout.activity_edit_profile, null)

    view.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
        override fun onGlobalLayout() {
            // remove listener
            view.viewTreeObserver.removeOnGlobalLayoutListener(this)

            // insert coordinates (coor) of each image to imagePosition variables
            Log.d("TAG", profilePic1.height.toString()) // RETURNS 360

        }
    })

因为在 xml 文件中,您在 DP 中给出了大小,而在 java 中,该参数以 Pixel 返回值,请检查此以了解有关 DP 和 PIxel 的更多信息

https://developer.android.com/training/multiscreen/screendensities

36x36 (0.75x) for low-density (ldpi)
48x48 (1.0x baseline) for medium-density (mdpi)
72x72 (1.5x) for high-density (hdpi)
96x96 (2.0x) for extra-high-density (xhdpi)
144x144 (3.0x) for extra-extra-high-density (xxhdpi)
192x192 (4.0x) for extra-extra-extra-high-density (xxxhdpi)

这只是因为您使用的是XXHDPI设备,其中 120dp 正在转换为 360PX。

必读“px”、“dip”、“dp”和“sp”有什么区别?


您应该阅读mdpi、hdpi、xhdpi 和 xxhdpi 的图像分辨率以了解 DP 和像素如何协同工作。 官方文档可以在这里找到


如果我简单地解释一下,在MDPI 1dp 几乎等于 1PX。 因此,如果您在MDPI分辨率的设备上检查代码,您将获得120PX输出。 但是当我在上面为其他分辨率添加了一个 URL 时,它遵循从 dp 到 PX 的转换规则。 它会给你180px in HDPI, 240px in XHDPI, 360px in XXHDPI, 480px in XXXHDPI设备作为输出。

在 java 中,您以px而不是dp获得高度。 您必须将其转换为dp才能获得正确的数据:

float px = profilePic1.height;
float dp = px / context.getResources().getDisplayMetrics().density;

// here dp should be 120

有一个名为sdpssp的库,用于使维度具有响应性。

因为您在检索它时在代码中以 dp(密度像素)为单位给出了高度,所以它仅以像素为单位进行检索。 您必须将其转换为 dp。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM