Подтвердить что ты не робот

Как поместить один вид над другим в RelativLlayout программно в Android?

Я программно создаю представление в Android. Родительский макет - RelativLlayout и я добавляю в него два вида. Сначала ListView а второй - пользовательский вид. Я хочу, чтобы мое второе пользовательское представление появилось поверх списка, но почему-то оно скрывается за ListView. Как я могу убедиться, что мой пользовательский вид находится сверху.

4b9b3361

Ответ 1

Представления помещаются в том порядке, в котором вы добавляете их в свои родительские представления. Представление, добавленное последним, будет сверху. Вы также можете попробовать View.bringToFront() http://developer.android.com/reference/android/view/View.html#bringToFront()

Ответ 2

Попробуйте использовать: View.bringToFront();

Ответ 3

Решение 1 - Просмотреть # bringToFront() View.bringToFront() должен работать при правильном использовании. Возможно, вы забыли это (источник: http://developer.android.com/reference/android/view/View.html#bringToFront()):

До KITKAT за этим методом должны следовать вызовы requestLayout() и invalidate()

Решение 2 - просмотр с повторной привязкой

Если View.bringToFront() не будет работать, попробуйте удалить и снова добавить представление. Преимущество состоит в том, что он имеет тот же код для версий до KITKAT.

Я делаю это так в своем коде:

ViewGroup parentView = (ViewGroup) (listView.getParent());
parentView.removeView(addFab);
parentView.addView(addFab);

Ответ 4

Используйте FrameLayout, макет кадра показывает последний добавленный вид сверху.

Ответ 5

Попробуйте следующее:

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >

   <ListView
     android:id="@+id/list"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

   <YourCustomView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerInParent="true" />

</RelativeLayout>

Ответ 6

Снова: представления помещаются в макет в том порядке, в котором вы его добавляете. Вопрос в том, действительно ли он скрыт или не отображает?. Проверьте ошибки в LogCat и консоли. Если вы добавите этот отдельный пользовательский вид в свой макет, он будет отображаться без каких-либо проблем? Если это так, убедитесь, что вы действительно добавляете свой пользовательский вид в одно и то же родительское представление (группу), когда вы добавляете свой ListView. Если вы не получите больше, укажите соответствующий пример кода.

Ответ 7

Это работает для меня:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="220dp"
android:gravity="bottom"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark">

<ImageView
    android:id="@+id/details_wrapper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="16dip"
    android:scaleType="centerCrop"
    android:src="@drawable/temp_nav_image">
</ImageView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="Kapil Rajput"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black"
        android:textStyle="bold"
        android:text="[email protected]"/>
 </LinearLayout>
 </RelativeLayout>

Ответ 8

Я использовал относительную компоновку, и порядок представлений каким-то образом определяет, какой из них находится сверху.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:splitTrack="false"
        android:layout_alignParentTop="true"
    />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"/>

В этом макете текстовое представление будет находиться поверх поисковой строки

Ответ 9

Сделайте родительское представление как относительный макет и добавьте оба представления в xml.It не будет работать для линейного макета. А затем добавьте программу FirstView.bringToFront() программно.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg"
android:orientation="vertical"
android:padding="15dp">


<ImageView
    android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:layout_marginBottom="-30dp"
    android:layout_marginTop="30dp"
    android:src="@mipmap/login_logo" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/imgIcon"
    android:layout_gravity="bottom"

    android:background="#B3FFFFFF"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingLeft="10dp"
    android:paddingRight="10dp">

<View 1/>
<View 2/>
</LinearLayout>

Java file
imgIcon.brigtToFront();

Ответ 10

вам следует использовать android:layout_below или android:layout_above программно. поэтому вы должны это сделать:

RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);

и я предлагаю вам взглянуть на этот ответ

надеюсь это поможет

Ответ 11

Пожалуйста, попробуйте добавить атрибут android:elevation к вашему представлению в XML. Он всегда будет размещать ваш пользовательский вид над ListView.