我有以下xml布局,有两个卡片视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.elye.myapplication.MainActivity">
<include layout="@layout/card_layout"
android:layout_margin="16dp"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<LinearLayout
android:layout_margin="16dp"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<include layout="@layout/card_layout"/>
</LinearLayout>
</LinearLayout>
卡片视图就像
一样简单<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_new_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="10dp">
<TextView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="MY TEXT"
android:layout_width="wrap_content" />
</android.support.v7.widget.CardView>
我的图片如下。这不好,因为第二张牌的高度缺失。
因为我想在第二张卡片视图中提升,所以我为我的cardView添加了android:layout_margin="10dp"
,如下所示。请注意10dp,以便更清楚地看出两个cardview的大小现在都不同了。
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_new_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:clickable="true"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="10dp">
<TextView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="MY TEXT"
android:layout_width="wrap_content" />
</android.support.v7.widget.CardView>
现在视图如下所示。哪个不好。我的第二张卡缩了。
现在我删除android:layout_margin="10dp"
card_view:cardUseCompatPadding="true"
。而且观点如下。
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_new_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardUseCompatPadding="true"
android:clickable="true"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="10dp">
<TextView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="MY TEXT"
android:layout_width="wrap_content" />
</android.support.v7.widget.CardView>
现在这两者都有提升,且大小一致。但是它在两张卡片之间存在巨大差距,这对我来说并不好。我希望我的原始差距......根据底部的图片。
理想情况下,我希望看起来像下面的东西,连同第二个cardView仍然是由东西包裹的(在这种情况下是LinearLayout)。保证金和cardUseCompatPadding没有解决我的问题。
所以我的问题是,如何保存CardView(由LinearLayout包装)高程,而不使用margin或cardUseCompatPadding,并且仍然看起来与纯粹仅包含的CardView相同。 (即我图表的第一张卡片视图)
P / S:不要让我删除LinearLayout,因为它用作插图。我出于其他原因需要该包装器(即动态更改其中的视图)
答案 0 :(得分:1)
试试这个,这对你有帮助。
这是您的第一个代码,我为第二个包含标记添加了宽度和高度。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.elye.myapplication.MainActivity">
<include
layout="@layout/card_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp" />
<LinearLayout
android:id="@+id/card_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--<include-->
<!--layout="@layout/card_layout"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_margin="16dp" />-->
</LinearLayout>
</LinearLayout>
和cardview布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_new_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="MY TEXT" />
</android.support.v7.widget.CardView>
Activity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer);
try {
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.card_layout);
final LayoutInflater factory = getLayoutInflater();
View view = factory.inflate(R.layout.card_layout, null);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int x = (int) getResources().getDimension(R.dimen.margin_16);
params.setMargins(x, x, x, x);
view.setLayoutParams(params);
linearLayout.addView(view);
} catch (Exception e) {
e.printStackTrace();
}
}
在res / values / dimens.xml中添加以下行
<dimen name="margin_16">16dp</dimen>