如何在xml中将可见度和高度的视图高度定义为wrap_content?

时间:2015-04-13 17:30:44

标签: java android xml

我有一个带有visibility = gone和height = wrap_content的ListView,我需要它的高度来制作展开动画。

我已经尝试过了:

view.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int height = view.getMeasuredHeight();

v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
int height = view.getMeasuredHeight();

v.measure(View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.UNSPECIFIED));
int height = view.getMeasuredHeight();

但它让我的价值降低了。

我试图在onResume之后这样做。

5 个答案:

答案 0 :(得分:11)

我找到的唯一方法是从可见标题视图的宽度设置我的视图的宽度,然后下面的代码返回正确的值。

int widthSpec = MeasureSpec.makeMeasureSpec(headerView.getWidth(), MeasureSpec.EXACTLY);
int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
v.measure(widthSpec, heightSpec);
int height = v.getMeasuredHeight();

答案 1 :(得分:3)

view.post(new Runnable() {
    @Override
    public void run() {
        view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        int height = view.getMeasuredHeight();
    }
});

这对我有用。方法" post"确保视图已添加到屏幕上。

答案 2 :(得分:2)

当一个物体消失时,它不再是布局的一部分。也许你的意思是将你的对象设置为不可见,在这种情况下你可能会得到一个感性值

答案 3 :(得分:2)

如果您想为可见性为 gone 的视图的高度设置动画,只有一种有效的方法可以做到这一点

先在隐藏视图的xml中添加这个

android:animateLayoutChanges="true"

那么这就是你可以将它设置为动画的方法

yourView.layoutTransition.enableTransitionType(LayoutTransition.CHANGING)

Android 将在该特定视图上为任何布局更改设置动画

答案 4 :(得分:-1)

这对我有用

const str = 'A';
const matches = data.filter(el => el.target.data.name === str);