Android:在ViewCard上显示视图

时间:2015-08-30 03:38:16

标签: android android-layout android-5.0-lollipop android-recyclerview android-cardview

我想实现这一点(CardView上的功能区): expected

这是我的解决方案的片段:

<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。

  1. 在cardview上查看视图的正确方法是什么?还有另一种方法可以达到同样的目的吗?为什么我的解决方案在某些情况下不起作用?
  2. 如何从屏幕左边缘开始生成绿色条带?目前,熨平板边缘和色带开始之间仍有空隙。

1 个答案:

答案 0 :(得分:2)

它是由elevation引起的,因为Android 21上的CardView使用true elevation而你的LinearLayout的高度为0,因此它位于CardView后面。

要解决此问题,您有2个选项

  1. 将android:elevation设置为LinearLayout,例如android:elevation="10px"
  2. 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>