【问题标题】:How get height of the a view with gone visibility and height defined as wrap_content in xml?如何获得可见性消失的视图的高度和在xml中定义为wrap_content的高度?
【发布时间】:2015-04-13 17:30:44
【问题描述】:

我有一个具有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 之后执行此操作。

【问题讨论】:

    标签: java android xml


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      view.post(new Runnable() {
          @Override
          public void run() {
              view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
              int height = view.getMeasuredHeight();
          }
      });
      

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

      【讨论】:

        【解决方案3】:

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

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

        android:animateLayoutChanges="true"
        

        那就是如何设置动画

        yourView.layoutTransition.enableTransitionType(LayoutTransition.CHANGING)
        

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 我不能把它定义为不可见,因为它会放弃屏幕上的空间。
          • 那么如果它不占用任何空间,它怎么能返回任何高度呢?您首先需要在它没有“消失”时计算它的高度。消失的物体不应该有任何高度
          • 您可以尝试获取列表中的项目数,然后您就可以计算它的高度
          • 是不是每个项目可以有不同的高度,我不知道总高度。
          • 将高度和宽度设置为 0,而不是 Visibility.GONE。所以它具有与 GONE 相同的效果,但是当您测量它时会给出正确的结果。
          【解决方案5】:

          这对我有用

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

          【讨论】:

          • 很确定你不应该在这里使用 LayoutParams 常量。
          猜你喜欢
          • 2015-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 2014-01-20
          • 2011-08-23
          相关资源
          最近更新 更多