Making a view displayed on top of other views and always onscreen

Viewed 48

enter image description here

I have this layout

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/imgDisplay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="centerCrop" />
    <LinearLayout
        android:id="@+id/MainLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical"
        android:background="@drawable/bg"
        android:keepScreenOn="true"
        tools:context=".MainActivity">
        <TextView
            style="@style/MyTextStyle"
            android:id="@+id/MessageTextView"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:gravity="center"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_centerHorizontal="true"
            android:visibility="gone"/>
            <ImageButton
                        android:src="@drawable/ic_angry"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/AngryImageButton"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp"
                        android:adjustViewBounds="true"
                        android:layout_gravity="center_horizontal"
                        android:background="@null"
                        android:scaleType="fitCenter" />

            <LinearLayout
            android:id="@+id/BottomLinearLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:gravity="bottom"
            android:layout_below="@+id/FacesHolderFrameLayout"
            android:orientation="horizontal"
            android:foregroundGravity="bottom">
            <Space
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1" />
            <ImageButton
                android:layout_weight="1"
                android:src="@drawable/ic_insert_chart_white_48dp"
                android:layout_width="wrap_content"
                android:layout_height="54dp"
                android:id="@+id/StatisticsImageButton"
                android:background="@null"
                android:layout_marginTop="20dp"
                android:scaleType="fitCenter" />
            <Space
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

Which in general is an imageview that takes the whole screen and acts as a background image, the above it i have a linearlayout (MainLinearLayout) that hold vertically a textview, an imagebutton (AngryImageButton) and another linearlayout (BottomLinearLayout) that is just display a small image (like the logo) horizontally centered.

I want to be able to change programatically the size of the AngryImageButton and the BottomLinearLayout to be displayed in the bottom of the screen and to be always visible. I mean to be on top of the other views.

Right now the BottomLinearLayout appears in the center and below the MainLinearLayout and if i make the AngryImageButton very large, it pushes below the BottomLinearLayout until its not visible in the screen at all, i don't want that. I want it to be at the bottom, and always visible.

How i can accomplish that? Also i want the layout to work in both orientations

1 Answers

To bring View to front, you can use

myView.bringToFront()

or You can make use of ViewCompat and set its translation Z like below.

ViewCompat.setTranslationZ(view, 1)

here's the doc for bringToFront() bringToFront()

Related