这是我的解决方案的片段:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ribbonParentId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|top"
android:layout_marginBottom="15dp"
android:background="@drawable/green_ribbon" >
<android.support.v7.widget.AppCompatTextView
android:id="@+id/ribbonId"
style="@style/RibbonStyle"
android:text="@string/ribbon_text" />
</LinearLayout>
<android.support.v7.widget.CardView
android:id="@+id/historicalWeightCardViewId"
style="@style/MyCardViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp" >
... Other elements
</android.support.v7.widget.CardView>
在RecycleView适配器中,我通过调用将功能区带到前面。
itemView.findViewById(R.id.ribbonParent2Id).bringToFront();
我的解决方案适用于我测试的大多数设备,除了Nexus 5(Android 5.1.1),其中功能区仍然(部分)位于cardview后面。我正在使用AppCompat并定位&gt; v4.0。
答案 0 :(得分:2)
它是由elevation
引起的,因为Android 21上的CardView使用true elevation
而你的LinearLayout的高度为0,因此它位于CardView后面。
要解决此问题,您有2个选项
LinearLayout
,例如android:elevation="10px"
将CardView
包裹在FrameLayout
下方
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.CardView
android:id="@+id/historicalWeightCardViewId"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="18dp" >
</android.support.v7.widget.CardView>
</FrameLayout>
<LinearLayout
android:id="@+id/ribbonParentId"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="left|top"
android:layout_marginBottom="15dp"
android:background="@android:color/holo_red_dark">
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ribbonId"
android:text="abc" />
</LinearLayout>