relativelayout中的Textview和按钮在android oreo和pie中不可见,但在其他android版本中完全可见

relativelayout中的Textview和按钮在android oreo和pie中不可见,但在其他android版本中完全可见,android,android-8.0-oreo,android-9.0-pie,Android,Android 8.0 Oreo,Android 9.0 Pie,relativelayout中的Textview和按钮在android oreo和pie中不可见,但在其他android版本中完全可见 if (mPromocodeCheckBox != null) { mPromocodeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override p

relativelayout中的Textview和按钮在android oreo和pie中不可见,但在其他android版本中完全可见

if (mPromocodeCheckBox != null) {
            mPromocodeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (inputMethodManager == null)
                        inputMethodManager = (InputMethodManager) ALTCommonUtils.currentActivity.getSystemService(Context.INPUT_METHOD_SERVICE);

                    if (mPromocodeLayout != null) {
                        if (isChecked) {
                            mPromocodeLayout.setVisibility(View.VISIBLE);
                            if (inputMethodManager != null && mPromocodeEditText != null) {
                                mPromocodeEditText.requestFocus();
                                inputMethodManager.showSoftInput(mPromocodeEditText, InputMethodManager.SHOW_IMPLICIT);
                            }
                            if (mPromocodeApplyButton != null)
                                mPromocodeApplyButton.setVisibility(View.VISIBLE);

                            if (mPromocodeEditText != null)
                                mPromocodeEditText.setEnabled(true);
                        } else {
                            mPromocodeLayout.setVisibility(View.GONE);
                            HandleViewsUtils.TextView_SetText(mPromocodeMsg, "");

                            if (inputMethodManager != null && mPromocodeEditText != null) {
                                HandleViewsUtils.EditText_SetText(mPromocodeEditText, "");
                                inputMethodManager.hideSoftInputFromWindow(mPromocodeEditText.getApplicationWindowToken(), 0);
                            }
                        }
                    }
                }
            });
        }
为供参考,我附上了xml代码的屏幕截图:

第一个屏幕截图显示了低于奥利奥和高于奥利奥的正常屏幕

当我单击下面oreo中的promocode复选框时,第二个屏幕截图完美显示:

当我点击奥利奥和馅饼中的促销代码复选框时,第三个屏幕截图显示不完美

您的xml屏幕截图读起来很痛苦,但我刚刚意识到您使用的是填充父项而不是匹配父项填充父项在API 8中被弃用

也许是时候转向最近引入的方法、设计模式和库了。开始使用约束布局而不是相对布局。以及它的未来。停止使用相对布局,仅在非常必要时使用它们。2018年关于布局的谷歌I/O讨论。你不知道谷歌什么时候会决定否决它,然后你的项目就会停止工作

另一件需要记住的事情是新的支持库,您应该开始将旧项目迁移到它。AndroidX将是未来新的单一支持库,所有基于数字的支持库都将停止使用

最后一件最重要的事情是你应该开始开发Android API 28+,这将由谷歌从今年开始实施;谷歌开发者。所以,开始迁移到当前的API和支持库

希望这有帮助

附录 确保您的代码库中有Android Studio关于弃用的警告。这里有更多的链接


您可以共享xml代码吗?当我尝试添加xml代码时,它显示以下错误“看起来您的帖子主要是代码;请添加更多详细信息”您可以尝试用xml代码替换以前的共享代码也共享您的xml文件。抱歉,伙计们,我无法附加xml代码,相反,我附加了截图。我改变了匹配父项而不是填充父项。尽管我没有得到这个问题的解决方案,但它已更改为匹配父项。忘记你的父母。将相对布局替换为约束布局,然后生成并运行项目。看看这是否为您提供了oreo及以上版本所需的ui。此外,请将XML布局附加到问题。此外,据我所知,如果id是由@+id定义的,那么您只需要在文件中稍后通过@id调用它。也试试看。在我的例子中,我为自定义复选框添加了额外的线性布局,然后它在oreo和pie版本中运行良好