BringToFront在协调器布局内不起作用

Android Studio 2.0 Preview 4 

我正在使用BringToFront获取TextView显示在其他控件的前面。

Doc的bringToFront()说你必须调用requestlayout invalidate 。 我做了什么,但不起作用。

 tvLevel.bringToFront(); tvLevel.requestLayout(); tvLevel.invalidate(); 

我在android.support.design.widget.CoordinatorLayout使用这个TextView

但是,下面的代码工作。 但只支持API 21及以上版本。 但是我需要支持API 16。

  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { tvLevel.setTranslationZ(4); tvLevel.invalidate(); } 

或者通过设置xml属性android:translationZ("4dp")工作。 但是,只适用于API 21

Solutions Collecting From Web of "BringToFront在协调器布局内不起作用"

  /** * Change the view's z order in the tree, so it's on top of other sibling * views. This ordering change may affect layout, if the parent container * uses an order-dependent layout scheme (eg, LinearLayout). Prior * to {@link android.os.Build.VERSION_CODES#KITKAT} this * method should be followed by calls to {@link #requestLayout()} and * {@link View#invalidate()} on the view's parent to force the parent to redraw * with the new child ordering. * * @see ViewGroup#bringChildToFront(View) */ public void bringToFront() { if (mParent != null) { mParent.bringChildToFront(this); } } 

根据这个你可能会错过这一行:

 ((View)myView.getParent()).requestLayout(); 

它会工作,检查出来。

在KITKAT之前,这个方法之后应该调用requestLayout()和invalidate() 视图的父级来强制父级重新绘制新的子级次序。

这些方法必须在视图的父级上调用。 你在视图本身上打电话给他们。

这应该工作。

 tvLevel.bringToFront(); tvLevel.getParent().requestLayout(); tvLevel.getParent().invalidate(); 

bringToFront()android.support.design.widget.CoordinatorLayout为我工作。 我的环境:

  • Android Studio 1.5.1
  • 设备:摩托罗拉Android 4.1.2(API 16)

activity_main.xml中:

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textStyle="bold" android:textSize="20sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher"/> </android.support.design.widget.CoordinatorLayout> 

MainActivity.java:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); textView.bringToFront(); } 

以下是截图:

textView.bringToFront();

在这里输入图像说明

没有textView.bringToFront();

在这里输入图像说明