Android在所有内容之上叠加视图?

2022-08-31 12:52:22

你能在Android中的所有内容上叠加视图吗?

在iPhone中,我会将新视图设置为(0,0),并将其宽度和高度设置为宽度和高度。然后将其添加到将导致它充当叠加层,覆盖后面的内容(或者如果它具有透明背景,则显示后面的视图)。frame.originself.viewself.view

机器人中有类似的技术吗?我意识到视图略有不同(有三种类型(或更多...)相对布局,线性布局和框架布局),但是有没有办法不加选择地将视图叠加在所有内容之上?


答案 1

只需使用 或 。最后一个子视图将覆盖其他所有内容。RelativeLayoutFrameLayout

Android支持Cocoa Touch SDK所不支持的模式:布局管理。
iPhone的布局意味着将所有内容都定位为绝对的(除了一些条纹因素)。Android中的布局意味着儿童将彼此相对放置。

示例(第二个 EditText 将完全覆盖第一个):

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/root_view">

    <EditText
        android:layout_width="fill_parent"
        android:id="@+id/editText1"
        android:layout_height="fill_parent">
    </EditText>

    <EditText
        android:layout_width="fill_parent"
        android:id="@+id/editText2"
        android:layout_height="fill_parent">
        <requestFocus></requestFocus>
    </EditText>

</FrameLayout>

FrameLayout是某种视图堆栈。专为特殊情况而设计。

RelativeLayout非常强大。您可以定义规则,例如视图 A 必须将父布局底部对齐视图 B 必须将 A 从下对齐到顶部,等等

根据评论进行更新

通常,您将内容设置为 in(它会为您膨胀布局)。您可以手动执行此操作并调用 ,没有区别。setContentView(R.layout.your_layout)onCreatesetContentView(inflatedView)

视图本身可以是单个视图(如 ),也可以是复杂的布局层次结构(嵌套布局,因为所有布局都是视图本身)。TextView

调用活动后,知道其内容的外观,您可以使用 来检索此层次结构中的任何视图(常规模式 )。setContentView(FrameLayout) findViewById(R.id.root_view)(ClassOfTheViewWithThisId) findViewById(R.id.declared_id_of_view)


答案 2
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:id = "@+id/Everything"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- other actual layout stuff here EVERYTHING HERE -->

   </LinearLayout>

<LinearLayout
    android:id="@+id/overlay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right" >
</LinearLayout>

现在,您在 LinearLayout 下添加的任何视图,使用 android:id = “@+id/overlay” 将显示为覆盖,重力 = 在线性布局上,android:id=“@+id/Everything”