2016-02-27 1 views
1

я следующее расположение (здесь представлены гораздо более простой дизайн):Почему FrameLayout не правильно задает порядок Z в моем макете?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/activity_main"> 
    <FrameLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     > 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Hey, badge!" 
      android:layout_margin="10dp" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="AAAAA" 
      android:layout_margin="10dp" 
      android:textSize="12sp" 
      android:background="#ff00ff" 
      android:padding="10dp" 
      android:layout_gravity="top|end" 
      /> 
    </FrameLayout> 
</RelativeLayout> 

Я хотел бы установить TextView с текстом «AAAA», чтобы выступать в качестве значка для кнопки, то есть, чтобы быть размещены над кнопкой в ​​его верхний правый угол, что не так.

Вместо этого, когда я пытаюсь этот код на HTC One M7 с леденец, или на Genymotion Nexus 6 с леденец, экран выглядит примерно так:

Screenshot of views badly placed

Когда я пытаюсь тот же код на Genymotion Nexus 5 с KitKat, все выглядит так, как ожидалось, т.е. вид сверху (кнопка) отображается под значком (текст)

Кто-нибудь знает, что здесь может быть неправильным?

Спасибо, Deveti

ответ

4

The elevation причины этой проблемы. Он был введен в Lollipop и отвечает за z-ordering. Скопируйте макет на layout-v21 и установите android:elevation="0dp" на кнопку.

+0

Он работал, спасибо! Но мне пришлось добавить 'android: elevation =" 2dp "для TextView, а затем появился значок. Не знаю почему, интересно. –

+1

Я забыл сказать, что если вы не хотите создавать несколько макетов, вы можете установить возвышение из кода с помощью 'View.setElevation (float)' на леденец или 'ViewCompat.setElevation (float)' на pre-lollipop. –

0

Я видел это в другом потоке где-то, но вы можете поместить это в ваши элементы:

android:stateListAnimator="@null" 

, как другие говорили, высота кнопки в Lolipop и вверх изменяется таким образом, его покрывающие другие элементы.

, например, с моей точки зрения кнопки ниже я использую его, и он показывает:

<FrameLayout 
    android:id="@+id/ib_one_container" 

    android:layout_width="38dp" 
    android:layout_height="38dp" 
    android:layout_marginLeft="5.3dp" 
    android:orientation="vertical" 
    android:padding="3dp" 
    > 


    <Button 
     android:id="@+id/ib" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" 
     android:clickable="true" 
     android:gravity="center" 
     android:stateListAnimator="@null" 
     android:textSize="11sp" /> 


    <com.mobile.pomelo.UI.customViews.CustomDiagonalLineView 
     android:id="@+id/diagaonal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="visible" 

     /> 


</FrameLayout> 
Смежные вопросы