Получите «полезную» область экрана в Android - PullRequest
0 голосов
/ 02 января 2019

На самом деле у меня есть экран, в котором root является 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>

При этом во фрагменте я проверяю, является ли пользователь впервые.

Если это так, тогда я изменяю LayoutParams для FrameLayout, чтобы он помещался на экране:

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 голосов
/ 02 января 2019

Из вашего эскиза похоже, что подсказка расположена не на плоскости прокрутки, а в верхней части нижней панели действий.Поэтому я предлагаю макет, структурированный следующим образом:

<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>

Смысл в том, чтобы наложить подсказку, а не показывать ее в виде прокрутки.

...