【发布时间】:2015-04-23 03:54:29
【问题描述】:
我在使用 Android 的新卡片视图时遇到了一个非常令人不安的问题。
我在我的LinearLayout 中用 XML 定义了一张卡片,并以编程方式定义了另一张卡片。
这就是我在 XML 中定义卡片视图的方式。
<android.support.v7.widget.CardView
android:id="@+id/incoming_call_status_card2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_horizontal_margin">
<include layout="@layout/common_cards_switch_summery"/>
</android.support.v7.widget.CardView>
这就是我在 Java 中的做法。
LinearLayout layout = (LinearLayout) view.findViewById(R.id.main_layout);
CardView card = new CardView(getActivity());
View.inflate(getActivity(), R.layout.common_cards_switch_summery, card);
layout.addView(card);
正如您所看到的,两张卡片基本相同,没有任何修改,我在这两种情况下唯一要做的就是使用 XML (R.layout.common_cards_switch_summery) 中定义的布局来扩充卡片视图。
但我得到的最终结果相当奇怪。
可以清楚地看到,在第一张卡中,即用 XML 定义的卡中,有一个显示某种高度的阴影,但在我用 Java 定义的第二张卡中,根本没有显示任何阴影。
当我在 XML 中设置 card_view:cardElevation="5dp" 时,海拔会正确显示。但是当我在 Java 中调用 card.setCardElevation(5); 时,根本没有提升。
有人可以解释背后发生的事情吗?有没有办法让我在以编程方式定义 XML 时获得与 XML 相同的结果?
PS - 在 Lollipop (5.0.1) 上测试
我在 Java 中导入相同的类,即 import android.support.v7.widget.CardView;
【问题讨论】:
-
使用 Hierarchy View 查看您是否可以确定哪些属性不同(除了边距,您在第一个但第二个没有)。此外,不要尝试
View.inflate(),而是尝试getActivity().getLayoutInflater().inflate(),因为View.inflate()使用LayoutInflater.from(),这几乎不是活动/片段的正确答案。第三,去掉addView(),因为那应该是多余的。
标签: android android-layout android-cardview