2015-12-26 3 views
25
Android Studio 2.0 Preview 4 

Я использую, чтобы использовать BringToFront, чтобы получить TextView, чтобы отобразить перед другими органами управления.BringToFront не работает внутри макета координатор

Doc's bringToFront() скажем, вы должны позвонить requestlayoutinvalidate. Что я делаю, но не работает.

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

ответ

13
/** 
    * 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

Со мной обратный, работает на android 4.4- но не работает в 5.0+, просто вызовите метод bringToFront() + requestLayout() + invalidate() ... – Gilian

8

До KitKat этого метода должен сопровождаться вызовами requestLayout() и недействительный() на родителе зрения в, чтобы заставить родителя перерисовывать с новым упорядочения ребенка.

Эти методы должны быть вызваны родителем представления. Вы называете их на самом представлении.

Это должно сработать.

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

bringToFront() работа для меня внутри android.support.design.widget.CoordinatorLayout. Моя среда:

  • Android Studio 1.5.1
  • устройства: Motorola с Android 4.1.2 (API 16)

activity_main.xml:

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

enter image description here

Без textView.bringToFront();

enter image description here

Смежные вопросы