Android覆盖了一切视图吗?

Tho*_*son 69 java layout android view

你可以在Android的所有内容上叠加视图吗?

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

android中是否有类似的技术?我意识到视图略有不同(有三种类型(或更多......)relativelayout,linearlayout和framelayout)但是有没有办法只是将视图叠加在所有内容之上?

Kni*_*edi 96

只需使用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>
Run Code Online (Sandbox Code Playgroud)

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

RelativeLayout是非常强大的.您可以定义规则,如视图A必须对齐父布局底部,视图B必须对齐从下到上,等等

根据评论更新

通常你用setContentView(R.layout.your_layout)in 设置内容onCreate(它会为你增加布局).你可以手动拨打电话setContentView(inflatedView),没有区别.

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

在调用setContentView您的活动之后,它知道它的内容是什么样的,您可以使用它(FrameLayout) findViewById(R.id.root_view)来检索此层次结构中的任何视图(常规模式(ClassOfTheViewWithThisId) findViewById(R.id.declared_id_of_view)).


小智 15

<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>
Run Code Online (Sandbox Code Playgroud)

现在,您在LinearLayout下添加的任何视图都android:id = "@+id/overlay"将显示为在线性布局上使用重力=右侧的叠加 android:id="@+id/Everything"


Ahm*_*deh 10

你可以使用bringToFront:

    View view=findViewById(R.id.btnStartGame);
    view.bringToFront();
Run Code Online (Sandbox Code Playgroud)


Jac*_*ong 7

最好的方法是ViewOverlay,自Android JellyBeanMR2(Api 18)以来,您可以将任何可绘制的叠加层添加到任何视图作为其叠加层.

添加mMyDrawablemMyView它的覆盖:

mMyDrawable.setBounds(0, 0, mMyView.getMeasuredWidth(), mMyView.getMeasuredHeight())
mMyView.getOverlay().add(mMyDrawable)
Run Code Online (Sandbox Code Playgroud)