Android Studio 2.0 Preview 4
我正在使用BringToFront
让TextView
显示在其他控件的前面。
文档bringToFront()说您必须致电requestlayout
invalidate
。我做了什么,但没有用。
tvLevel.bringToFront();
tvLevel.requestLayout();
tvLevel.invalidate();
我在TextView
android.support.design.widget.CoordinatorLayout
但是,以下代码确实有效。但仅支持API 21及更高版本。但我需要支持API 16。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
tvLevel.setTranslationZ(4);
tvLevel.invalidate();
}
或者通过设置xml
属性属性android:translationZ("4dp")
起作用。但是,仅适用于API 21
答案 0 :(得分:14)
/**
* 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();
它会工作,检查出来。!
答案 1 :(得分:8)
在KITKAT之前,此方法之后应该调用 在视图的父级上使用requestLayout()和invalidate()来强制 父母用新的孩子订购重绘。
必须在视图的父级上调用这些方法。你在视图本身上调用它们。
这应该有用。
tvLevel.bringToFront();
tvLevel.getParent().requestLayout();
tvLevel.getParent().invalidate();
答案 2 :(得分:8)
bringToFront()
在android.support.design.widget.CoordinatorLayout
内为我工作。我的环境:
<强> 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();