配置更改后,工具栏项没有尺寸(宽度、高度、左侧、右侧等)

toolbar items have no dimensions (width, height, left, right, ...) after a configuration change

提问人:ema3272 提问时间:10/14/2023 更新时间:10/19/2023 访问量:25

问:

我正在开发一个教程,该教程需要在工具栏的各个项目上显示指针。 工具栏归活动所有。 在运行本教程的片段中,我有以下代码:

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        ...
        tutorialViewModel.getTutoData().observe(getViewLifecycleOwner(), tutoData -> {
            ...
            scToolbar = getActivity().findViewById(R.id.toolbar);
            ...
            androidx.appcompat.widget.AppCompatImageButton navigationButton = null;
            try {
                navigationButton = (androidx.appcompat.widget.AppCompatImageButton) scToolbar.getChildAt(scToolbar.getChildCount() - 1);
            } catch (Exception ClassCastException) {
                for (int i = 0; i < scToolbar.getChildCount(); i++) {
                    if (scToolbar.getChildAt(i) instanceof androidx.appcompat.widget.AppCompatImageButton) {
                        navigationButton = (androidx.appcompat.widget.AppCompatImageButton) scToolbar.getChildAt(i);
                        break;
                    }
                 }
             }

             androidx.appcompat.widget.AppCompatImageButton finalNavigationButton = navigationButton;
             navigationButton.post(new Tutorial(tutoMsg, (int) (finalNavigationButton.getLeft() + 0.5f* finalNavigationButton.getWidth()), 0, finalNavigationButton.getHeight(), tutoData.isTutoOutOfSequence()));
             ...
        });

首次启动活动和此片段时,此代码工作正常。

一旦发生配置更改(实际上是方向更改),工具栏本身及其每个项目的宽度/高度/左/上/右/下字段都等于零,从而破坏了我指向任何特定项目的努力。

为什么? 我应该在此代码中更改哪些内容?

android android-toolbar 设备方向

评论


答:

0赞 ema3272 10/19/2023 #1

以下代码是一种解决方法(我确实认为这不是解决方案;但是它解决了我的问题):

helpFrameLayout.post(() -> tutorialViewModel.getTutoData().observe(getViewLifecycleOwner(), tutoData -> {.post(() -> tutorialViewModel.getTutoData().observe(getViewLifecycleOwner(), tutorialData -> { ... }

tutorialViewModel.getTutoData().observe(getViewLifecycleOwner(), tutoData -> { ... }

其中 是显示教程消息的 ConstraintLayout。tutorialViewModel