题 如何在android中以编程方式将一个视图放在Relative布局中?


我在android中以编程方式创建视图。父布局是相对布局,我在其中添加了两个视图。第一个是列表视图,第二个是自定义视图。我希望我的第二个自定义视图位于列表的顶部,但不知何故它隐藏在列表视图后面。如何确保我的自定义视图位于顶部。


29
2018-05-20 08:56


起源


请postyour代码 - Iftikar Urrhman Khan


答案:


视图按照将它们添加到父视图的顺序放置。最后添加的视图将位于顶部。您可能还想尝试一下 View.bringToFront()  http://developer.android.com/reference/android/view/View.html#bringToFront()


29
2018-05-20 09:14



我尝试使用bringToFront()但它没有用 - Chimu


尝试使用: View.bringToFront(); 


12
2018-05-20 09:03



它不工作,我不知道为什么 - Chimu
谢谢..它为我工作.. :) - ADT


解决方案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);

6
2018-03-21 09:08





使用FrameLayout,框架布局显示最后添加的视图在顶部..


4
2018-05-20 09:13



我不想使用FrameLayout,不管怎么说在Relative Layout本身都没有? - Chimu
我想我们永远不会知道 - Denny


尝试这个 :

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

4
2018-05-20 09:14



出于某种原因,我只想使用相对布局,不管怎样都没有处理相对布局子的z顺序 - Chimu


再次:视图按照添加顺序放置到布局中。问题是:它是真的隐藏还是不渲染?检查LogCat和控制台是否有错误。如果您只将这个自定义视图添加到您的布局中,它是否会被渲染而没有任何问题?如果是这样,请确保在添加ListView时将所有自定义添加到同一父视图(组)。如果您没有进一步,请提供相应的代码示例。


1
2018-05-21 05:21





这对我有用:

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

0
2017-12-07 12:52





我使用相对布局,视图的顺序以某种方式确定哪一个在顶部。

<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将位于搜索栏的顶部


0
2018-05-18 02:35





将父视图设置为相对布局,并在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();

0
2017-09-29 04:52





你应该做的是使用 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);

我建议你 看看这个答案

希望这可以帮助


0
2018-05-29 10:36