我有以下布局(这里提供了更简单的设计):
less
我希望将带有文本“AAAA”的TextView设置为Button的徽章,即放置在其右上角的按钮上,但事实并非如此。
相反,当我在带有Lollipop的HTC One M7或带有Lollipop的Genymotion Nexus 6上尝试此代码时,屏幕看起来像这样:
当我在Genymotion Nexus 5上使用KitKat尝试相同的代码时,一切看起来都符合预期,即第一个视图(按钮)显示在徽章(textview)下面
有没有人知道这里有什么问题?
谢谢, Deveti
答案 0 :(得分:5)
elevation导致此问题。它在Lollipop中引入并负责z-ordering。将您的布局复制到layout-v21
并为该按钮设置android:elevation="0dp"
。
答案 1 :(得分:1)
我在使用FrameLayout时遇到了类似的问题,它用作进度指示器叠加层(当我的屏幕正忙于加载时)。
我不想将XML添加到应用程序中的所有其他元素,因此我只是向FrameLayout叠加层添加了一个高程。请注意clickable属性,该属性可确保click事件不会传递到下面的按钮。
进度指示器叠加层:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progress_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.4"
android:background="@android:color/black"
android:animateLayoutChanges="true"
android:elevation="10dp"
android:clickable="true"
android:visibility="gone">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
在其他视图中包括进度指示器:
<include layout="@layout/progress_overlay"/>
的原始解决方案
答案 2 :(得分:0)
我在另一个线程上看到了这个,但是你可以把它放到你的元素中:
android:stateListAnimator="@null"
正如其他人所说,lolipop和up中的按钮高度发生了变化,因此它覆盖了其他元素。
例如在我的按钮视图中,我使用它并显示:
<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>