【问题标题】:Creating dynamically sized square (equal height and width) UI elements in Android在 Android 中创建动态大小的正方形(等高和等宽)UI 元素
【发布时间】:2014-01-23 04:35:00
【问题描述】:

正如标题所述,我正在尝试将布局元素的宽度设置为等于高度(设置为与父级匹配)。我尝试从高度参数以编程方式设置宽度参数,但这显示为 -1 而不是实际高度(因为它与父级匹配)。任何人都知道如何创建大小是动态的方形布局元素?谢谢。

【问题讨论】:

    标签: android layout user-interface height width


    【解决方案1】:

    所以我一直在为这样的事情做 - 我不知道它是否理想,但效果很好 - 是使用 ViewTreeObserver.OnGlobalLayoutListener。像这样的:

    View myView = findViewById(R.id.myview);
    ViewTreeObserver observer = myView.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new SquareLayoutAdjuster());
    
    class SquareLayoutAdjuster 
            implements ViewTreeObserver.OnGlobalLayoutListener {
        @Override
        public void onGlobalLayout() {
            int dimension = myView.getHeight();
            LayoutParams params = myView.getLayoutParams();
            params.width = dimension;
            myView.setLayoutParams(params);
            observer.removeGlobalOnLayoutListener(this);
        }
    }
    

    这只是大致思路,不知道是不是按原样编译,但基本上在onGlobalLayout()方法中,你的观点是保证被衡量的。最后移除监听器以防止它被多次调用(除非出于任何原因需要发生这种情况)。

    【讨论】:

      【解决方案2】:

      KCOPPOCK 的解决方案对我有用,谢谢。但是我在运行时得到“java.lang.IllegalStateException:这个 ViewTreeObserver 不存在,再次调用 getViewTreeObserver()”。所以我用 findViewById(R.id.serie_main_layout).getViewTreeObserver().removeOnGlobalLayoutListener(this);

      改为

      observer.removeGlobalOnLayoutListener(this);
      

      一切运行良好。

      【讨论】:

        猜你喜欢
        • 2020-10-03
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 2019-09-09
        • 1970-01-01
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多