CardView的可扩展高度

时间:2017-07-10 06:23:51

标签: android cardview

我正致力于CardView上的属性的展开和折叠。

public class SimpleCardView extends CardView {
private int animationDuration;


   public SimpleCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public SimpleCardView(Context context) {
        super(context);
    }

    public SimpleCardView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void expand(){
        final int initialHeight = getHeight();
        final float scale = getContext().getResources().getDisplayMetrics().density;
        int targetHeight = (int) (232 * scale + 0.5f);
        final int distance_to_expand = targetHeight - initialHeight;
        Animation animation = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {
                getLayoutParams().height = (int) (initialHeight +(distance_to_expand*interpolatedTime));
                requestLayout();
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };
        animationDuration = distance_to_expand;
        animation.setDuration((long)distance_to_expand);
        startAnimation(animation);
    }

    public int getAnimationTime(){
        return animationDuration;
    }

    public void collapse(){}

}

这是我的截图:

enter image description here

我正在为目标高度设置常量值。

int targetHeight = (int) (232 * scale + 0.5f);

此处,targetHeightCardView的可扩展高度。 因此,当内容太长时,只显示少部分内容。

有没有办法动态设置高度而不是常量值?

1 个答案:

答案 0 :(得分:0)

你有没有尝试过:wrap_content

android:layout_height="wrap_content"

<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content">

您需要删除类SimpleCardView的静态高度。

**或你需要计算身高**

为此,您需要将文本设置为TextView然后 使用下面的行计算TextView的高度,然后通过制作任何setter方法传递到SimpleCardView

TextView textview ;

textveiw.setText("your text");
textview.mesure(0,0);
int height = textview.getMesuredHeight();