Я программно создаю представление в Android. Родительский макет - RelativLlayout
и я добавляю в него два вида. Сначала ListView
а второй - пользовательский вид. Я хочу, чтобы мое второе пользовательское представление появилось поверх списка, но почему-то оно скрывается за ListView
. Как я могу убедиться, что мой пользовательский вид находится сверху.
Как поместить один вид над другим в RelativLlayout программно в Android?
Ответ 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.