在Android中获取“可用”屏幕区域

时间:2019-01-02 10:38:29

标签: android kotlin view scrollview visible

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

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

enter image description here

要达到这个目的,我的观点是:

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

问题

这就是我要解决的问题,因为我得到了整个屏幕的高度,然后工具提示隐藏了,因为它在底部。

有什么方法可以获取图像中的“可见区域”?

1 个答案:

答案 0 :(得分: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>

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