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

BringToFront doesn't work inside a coordinator layout

Android Studio 2.0 Preview 4

我正在使用 BringToFront 来获得一个 TextView 显示在其他控件的前面。

医生的 bringToFront() 说你必须打电话给 requestlayout invalidate。我这样做了,但不起作用。

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

我在 android.support.design.widget.CoordinatorLayout

中使用这个 TextView

但是,以下代码确实有效。但只支持API21及以上。但是我需要支持 API 16.

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

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

Prior to KITKAT this method should be followed by calls to requestLayout() and invalidate() on the view's parent to force the parent to redraw with the new child ordering.

必须在视图的父级上调用这些方法。您是在视图本身上调用它们。

这应该有效。

tvLevel.bringToFront();
tvLevel.getParent().requestLayout();
tvLevel.getParent().invalidate();
   /**
     * 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 (e.g., 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();

它会起作用,检查一下!

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