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

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();

在此处输入图像描述