有没有办法在不创建循环的情况下运行此代码

问题描述 投票:0回答:3

我有4个按钮,动态改变文本,可以导致按钮的高度不同,我的代码试图避免这种情况,但也创建一个循环

    ViewTreeObserver observer= Button0.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {

                    int HighestButton;
                    HighestButton = Button0.getHeight();
                    Log.d("HighestButton", HighestButton+ " 0");
                    if(Button1.getHeight() > HighestButton){
                        HighestButton = Button1.getHeight();
                        Log.d("HighestButton", HighestButton+ " 1");
                    }
                    if(Button2.getHeight() > HighestButton){
                        HighestButton = Button2.getHeight();
                        Log.d("HighestButton", HighestButton+ " 2");
                    }
                    if(Button3.getHeight() > HighestButton){
                        HighestButton = Button3.getHeight();
                        Log.d("HighestButton", HighestButton+ " 3");
                    }

                    Button0.setHeight(HighestButton);
                    Button1.setHeight(HighestButton);
                    Button2.setHeight(HighestButton);
                    Button3.setHeight(HighestButton);

                }
            });
java android
3个回答
0
投票

设置按钮高度后,只需从观察者中删除监听器即可

ViewTreeObserver observer= Button0.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {

                    int HighestButton;
                    HighestButton = Button0.getHeight();
                    Log.d("HighestButton", HighestButton+ " 0");
                    if(Button1.getHeight() > HighestButton){
                        HighestButton = Button1.getHeight();
                        Log.d("HighestButton", HighestButton+ " 1");
                    }
                    if(Button2.getHeight() > HighestButton){
                        HighestButton = Button2.getHeight();
                        Log.d("HighestButton", HighestButton+ " 2");
                    }
                    if(Button3.getHeight() > HighestButton){
                        HighestButton = Button3.getHeight();
                        Log.d("HighestButton", HighestButton+ " 3");
                    }

                    Button0.setHeight(HighestButton);
                    Button1.setHeight(HighestButton);
                    Button2.setHeight(HighestButton);
                    Button3.setHeight(HighestButton);

                    if (observer.isAlive()) {
                        observer.removeGlobalOnLayoutListener(this);
                    }

                }
            });

0
投票
ViewTreeObserver observer = Button0.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {

                    if(Button1.getHeight() > Button0.getHeight()){
                        Button0.setHeight(Button1.getHeight());
                    }

                    if(Button2.getHeight() > Button1.getHeight()){
                        Button0.setHeight(Button2.getHeight());
                        Button1.setHeight(Button2.getHeight());
                    }

                    if(Button3.getHeight() > Button2.getHeight()){
                        Button0.setHeight(Button3.getHeight());
                        Button1.setHeight(Button3.getHeight());
                        Button2.setHeight(Button3.getHeight());
                    }
                }
            });

0
投票

动态更改文本是什么意思?你在按钮中调用设置文本,

所以我认为你可以在没有ViewTreeObserver的情况下设置文本后立即执行此操作

© www.soinside.com 2019 - 2024. All rights reserved.