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