活动生命周期 - 接收布局完成的通知

kit*_*son 31 user-interface android android-activity

我有一个活动,其中我有3个按钮放在一起.我使用了Button的子类,它将调整按钮文本的大小以防止文本换行.我希望3个按钮共享相同的文本大小.为了做到这一点,我打算检测文本大小最小的按钮,并将其他2个按钮设置为该文本大小.

我遇到的问题是知道Activity何时完成了它的组件布局,以便我可以可靠地知道文本的大小调整已经发生.从Android文档中可以看出生命周期中的最新通知是onResume(),但此时布局似乎尚未完成.有没有办法接收活动布局已完成的通知?

Gre*_*reg 28

我使用Tree Observers做了类似的事情.您可能需要稍微调整它以找到它应该附加的视图,但是一旦设置了视图就会触发.从那里,您可以获得文本的大小,并进行所需的任何更改.

mTestButton.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // make sure it is not called anymore 
        mTestButton.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        float size = mTestButton.getTextSize();
    }
});
Run Code Online (Sandbox Code Playgroud)


编辑:
方法#removeGlobalOnLayoutListener已被弃用,但仍然有效.要同时使用新旧方法,请参阅此stackoverflow答案.

  • @ercan使用mapFragment.getView().getViewTreeObserver() (2认同)

QRo*_*hlf 0

也许您可以在按钮(或包含按钮的视图组)上设置OnLayoutChangeListener并在那里重新调整字体大小?我不确定它是在布局更改生效之前还是之后被调用......