BringToFront не работает внутри макета координатора
Android Studio 2.0 Preview 4
Я использую для использования BringToFront
, чтобы получить TextView
для отображения перед другими элементами управления.
Doc bringToFront() говорит, что вам нужно позвонить requestlayout
invalidate
. Что я делаю, но не работает.
tvLevel.bringToFront();
tvLevel.requestLayout();
tvLevel.invalidate();
Я использую этот TextView
внутри a 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
Ответы
Ответ 1
/**
* Change the view z order in the tree, so it 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 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();
и он будет работать, проверьте его.!
Ответ 2
До KITKAT этому методу должны следовать вызовы requestLayout() и invalidate() в родительском представлении, чтобы заставить родительский для перерисовки с новым упорядочением потомков.
Эти методы нужно вызвать в родительском представлении. Вы вызываете их на самом представлении.
Это должно работать.
tvLevel.bringToFront();
tvLevel.getParent().requestLayout();
tvLevel.getParent().invalidate();
Ответ 3
bringToFront()
работайте для меня внутри android.support.design.widget.CoordinatorLayout
. Моя среда:
- Android Studio 1.5.1
- Устройство: Motorola с 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();
![введите описание изображения здесь]()