Tho*_*son 69 java layout android view
你可以在Android的所有内容上叠加视图吗?
在iPhone中,我会将新视图设置frame.origin为(0,0),其宽度和高度设置为宽度和高度self.view.添加它self.view然后会使它充当叠加层,覆盖后面的内容(或者如果它具有透明背景,然后显示后面的视图).
android中是否有类似的技术?我意识到视图略有不同(有三种类型(或更多......)relativelayout,linearlayout和framelayout)但是有没有办法只是将视图叠加在所有内容之上?
Kni*_*edi 96
只需使用RelativeLayout或FrameLayout.最后一个子视图将覆盖其他所有内容.
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)
最好的方法是ViewOverlay,自Android JellyBeanMR2(Api 18)以来,您可以将任何可绘制的叠加层添加到任何视图作为其叠加层.
添加mMyDrawable到mMyView它的覆盖:
mMyDrawable.setBounds(0, 0, mMyView.getMeasuredWidth(), mMyView.getMeasuredHeight())
mMyView.getOverlay().add(mMyDrawable)
Run Code Online (Sandbox Code Playgroud)