我在 Android 中以编程方式创建视图。父布局为RelativLlayout
,我在其中添加了两个视图。第一个是ListView
,第二个是自定义视图。我希望我的第二个自定义视图位于列表的顶部,但不知何故它隐藏在ListView
后面。如何确保我的自定义视图位于顶部。
答案 0 :(得分:31)
视图按照您将其添加到父视图的顺序放置。最后添加的视图将位于顶部。您可能还想尝试一下
View.bringToFront()
http://developer.android.com/reference/android/view/View.html#bringToFront()
答案 1 :(得分:12)
尝试使用:View.bringToFront();
答案 2 :(得分:6)
解决方案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);
答案 3 :(得分:5)
使用FrameLayout,框架布局显示最后添加的视图..
答案 4 :(得分: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>
答案 5 :(得分:1)
再次:视图按照添加顺序放置到布局中。问题是:它是真的隐藏还是不渲染?检查LogCat和控制台是否有错误。如果您只将此单个自定义视图添加到布局中,它是否会在没有任何问题的情况下呈现?如果是这样,请确保在添加ListView时将自定义添加到同一父视图(组)。如果您没有进一步提供,请提供相应的代码示例。
答案 6 :(得分:0)
这对我有用:
<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="kapil@gnxtsystems.com"/>
</LinearLayout>
</RelativeLayout>
答案 7 :(得分:0)
我使用相对布局,视图的顺序以某种方式确定哪一个位于顶部。
<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"/>
在此布局中,textview将位于搜索栏的顶部
答案 8 :(得分:0)
将父视图设为相对布局,并在xml中添加两个视图。它不适用于线性布局。 然后以编程方式添加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();
答案 9 :(得分:0)
您应该以编程方式使用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);
我建议你take a look at this answer
希望这会有所帮助
答案 10 :(得分:0)
请尝试在XML中向您的视图添加android:elevation
属性。它将始终将您的自定义视图放在ListView上。
答案 11 :(得分:0)
为要显示的视图提供高程。
android:elevation="2dp"