【问题标题】:Get "usable" screen area in Android在 Android 中获取“可用”屏幕区域
【发布时间】:2019-01-02 10:38:29
【问题描述】:

实际上我有一个屏幕,根是ScrollableView,但是当用户第一次进入时,我必须显示一个“工具提示”。问题是我必须在背景中显示一个“锚定”到视图底部的图像。

所以这就是问题所在。我需要知道在哪里放置这个视图,因为它取决于屏幕的大小。

为了实现这一点,我的看法是:

xml 文件

<ScrollView>
    <ConstraintLayout>
        ....

        <FrameLayout
            android:id="@+id/first_open_tooltip"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@drawable/gradient_white_transp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView
                    android:id="@+id/mini_marker"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="100dp"
                    android:layout_marginBottom="16dp"
                    android:src="@drawable/ic_bg_tooltip_marker"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent" />

                <ImageView
                    android:id="@+id/discover_new_tooltip"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/bg_tooltip"
                    app:layout_constraintBottom_toTopOf="@id/mini_marker"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent" />

                <TextView
                    android:layout_width="224dp"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="32dp"
                    android:fontFamily="@font/montserrat_bold"
                    android:gravity="center_horizontal"
                    android:maxLines="2"
                    android:text="@string/firstopen_tooltip"
                    android:textColor="#ffffff"
                    android:textSize="18sp"
                    app:layout_constraintBottom_toBottomOf="@id/tooltip"
                    app:layout_constraintEnd_toEndOf="@id/tooltip"
                    app:layout_constraintStart_toStartOf="@id/tooltip" />

            </android.support.constraint.ConstraintLayout>
        </FrameLayout>
    </ConstraintLayout>
</ScrollView>

这样,我在 Fragment 中验证用户是否是第一次。

如果是,那么我更改 FrameLayout 的 LayoutParams 以使其适合屏幕:

val display = activity!!.windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val height = size.y

var lp = discover_first_open_tooltip.layoutParams
lp.height = height //<--problem
first_open_tooltip.layoutParams = lp

问题

所以这就是我遇到问题的地方,因为我得到了全屏高度,然后工具提示隐藏在底部。

有什么方法可以获取“可见区域”(在图片中)?

【问题讨论】:

  • 你试过DisplayMetrics然后减去状态栏、导航栏和底部导航视图的高度吗?
  • 有什么办法可以得到这个视图的大小吗?或者通常大小相同,例如... 48dp?因为如果我没记错的话,我已经转换为 dp -> px 来设置布局参数,不是吗?
  • 您无需猜测这些视图的大小(大多数情况下为 48dp)。只需运行我在运行时指出的计算。是的,你会在 PX 中需要它们。

标签: android kotlin view scrollview visible


【解决方案1】:

从您的草图来看,工具提示似乎不在滚动平面上,而是位于底部操作栏的顶部。因此,我提出了一个这样的布局:

<ScrollView>
    <ConstraintLayout>
        ....
    </ConstraintLayout>
</ScrollView>
<ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <PutYourToolTipHere        
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>

        <YourMenuBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</ConstraintLayout>

它的重点是覆盖工具提示而不是在滚动视图中显示它。

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多