以编程方式创建CardView不能正确应用样式

时间:2015-07-29 12:28:30

标签: android android-styles android-cardview

我尝试从代码中创建<style name="CardViewStyle" parent="CardView"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_margin">8dp</item> </style> <style name="Widget.CardContent" parent="android:Widget"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:paddingLeft">16dp</item> <item name="android:paddingRight">16dp</item> <item name="android:paddingTop">24dp</item> <item name="android:paddingBottom">24dp</item> <item name="android:orientation">vertical</item> </style> 。但是,它似乎没有正确应用样式。以下是样式:

<android.support.v7.widget.CardView
style="@style/CardViewStyle">
    <LinearLayout
        style="@style/Widget.CardContent">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textAppearance="@style/TextAppearance.AppCompat.Title" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Caption"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

在XML中,它看起来像这样:

CardView card = new CardView(new ContextThemeWrapper(MyActivity.this, R.style.CardViewStyle), null, 0);
LinearLayout cardInner = new LinearLayout(new ContextThemeWrapper(MyActivity.this, R.style.Widget_CardContent));

TextView tv_title = new TextView(this);
tv_title.setLayoutParams(new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT
));
tv_title.setTextAppearance(this, R.style.TextAppearance_AppCompat_Title);
tv_title.setText("Name");

TextView tv_caption = new TextView(this);
tv_caption.setLayoutParams(new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT
));
tv_caption.setText("Sus");

cardInner.addView(tv_title);
cardInner.addView(tv_caption);

现在我试图在Java中做同样的事情:

parent="CardView"

以下是结果。在此图像中,第一个CardView由XML创建。第二个CardView以编程方式创建。似乎第二个不仅仅应用<head> <noscript>Please enable JavaScript.</noscript> </head> <template name="index"> ... </template> ,因为其他属性(layout_width,layout_height,layout_margin)被正确应用。

2 个答案:

答案 0 :(得分:9)

出于某种原因,设置保证金会使整个事情再次发挥作用。

Boolean.FALSE

答案 1 :(得分:2)

我有类似的问题,这对我有帮助:CardView has lost margin when inflating

我将list(MyModel.objects.all())作为CardView的父级传递给'-field', 'parent__field',这意味着忽略了xml null等参数。