Android覆盖了一切的顶部?

你能覆盖在android的一切视图顶部?

在iPhone中,我会得到新的视图设置frame.origin (0,0),其宽度和高度frame.origin的宽度和高度。 将它添加到self.view会导致它作为一个覆盖,覆盖背后的内容(或者如果它有一个透明的背景,然后显示后面的视图)。

在android中有类似的技术吗? 我意识到,意见稍有不同(有三种types(或更多…)relativelayout,linearlayout和framelayout),但是有什么办法只是不分青红皂白地覆盖视图的顶部?

Solutions Collecting From Web of "Android覆盖了一切的顶部?"

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

Android支持Cocoa Touch SDK不支持的模式:布局pipe理。
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的规则, 必须alignment父级布局底部视图B必须alignment底部到顶部

根据评论更新

通常你在onCreate使用setContentView(R.layout.your_layout)来设置内容(这会使你的布局膨胀)。 你可以手动执行,并调用setContentView(inflatedView) ,没有什么区别。

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

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

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

您可以使用bringToFront

  View view=findViewById(R.id.btnStartGame); view.bringToFront(); 

最好的办法是ViewOverlay ,你可以添加任何可绘制的覆盖作为覆盖,因为Android JellyBeanMR2(Api 18)覆盖任何视图。

mMyDrawable添加到mMyView作为覆盖:

 mMyDrawable.setBounds(0, 0, mMyView.getMeasuredWidth(), mMyView.getMeasuredHeight()) mMyView.getOverlay().add(mMyDrawable) 

之前我曾经尝试过这种方法,但是这并没有奏效。 现在我只是用一个LinearLayout而不是一个TextureView,现在它工作没有任何问题。 希望它能帮助一些有相同问题的人。 🙂

  view = (LinearLayout) findViewById(R.id.view); //this is initialized in the constructor openWindowOnButtonClick(); public void openWindowOnButtonClick() { view.setAlpha((float)0.5); FloatingActionButton fb = (FloatingActionButton) findViewById(R.id.floatingActionButton); final InputMethodManager keyboard = (InputMethodManager) getSystemService(getBaseContext().INPUT_METHOD_SERVICE); fb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // check if the Overlay should be visible. If this value is false, it is not shown -> show it. if(view.getVisibility() == View.INVISIBLE) { view.setVisibility(View.VISIBLE); keyboard.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); Log.d("Overlay", "Klick"); } else if(view.getVisibility() == View.VISIBLE) { view.setVisibility(View.INVISIBLE); keyboard.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); }