创建动态大小的平方(等于高度和宽度)Android中的UI元素(Creating dynamical

2019-09-19 08:33发布

正如标题状态,我试图设置一个布局元素的宽度是等于高度(其被设置为匹配父)。 我试着从高处参数编程设置宽度参数,但是这显示为-1,而不是实际的高度(因为它的父匹配)。 任何人都知道我怎么可以创建多页面元素的大小是动态的? 谢谢。

Answer 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()方法,你的意见,保证测量。 在结尾删除侦听器,以防止它被多次调用(除非你需要这样的事情发生无论出于何种原因)。



Answer 2:

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

代替

observer.removeGlobalOnLayoutListener(this);

和所有完美的作品。



文章来源: Creating dynamically sized square (equal height and width) UI elements in Android