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

  • Android双SIM卡API
  • 如何防止Android的drawBitmap只绘制黑色图像?
  • Android Junittesting失败,只有“创build视图层次结构的原始线程可以触及其视图”。
  • Android:如何将活动声明为主要和可search的?
  • 如何显示与谷歌玩游戏服务的排行榜?
  • 在Android设备上检测NFC
  • ICS 4.0.4上的安全元素访问控制
  • 你如何阅读Android上的NFC标签的唯一ID?
  •   /** * 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();

    在这里输入图像说明