gpt4 book ai didi

android - 在方向更改时替换布局

转载 作者:可可西里 更新时间:2023-11-01 19:12:43 25 4
gpt4 key购买 nike

我的应用在 LinerLayout 中有一个 webview 和一些按钮。

问题是,我希望按钮在纵向模式下位于底部,在横向模式下位于左侧,同时 webview 保持其状态。

两种不同的布局不起作用,因为它强制重新创建刷新 web View 的 Activity 。现在我在 Activity 标签中使用 android:configChanges="orientation" 这样 webview 就不会在方向改变时刷新。

有没有办法根据屏幕模式的变化来替换按钮的布局?

enter image description here

人像模式

enter image description here

横向模式

最佳答案

我测试了 fragment ,但处理 fragment 使事情变得更加复杂, fragment 本身需要保存和恢复,这在具有 javascript 状态的 webview 中可能不起作用,所以我搜索了更多并在某处找到了一篇不错的文章并进行了一些修改我提出了一个建议的解决方案:

首先,添加 android:configChanges="orientation|screenSize|keyboard|keyboardHidden" 以便应用处理配置更改而不是 android。

为横向和纵向制作两种不同的布局。在这两种布局中放置一个 FrameLayout 而不是 webview,它充当 webview 的占位符。

像这样定义 initUI 方法,并将与 UI 初始化相关的所有内容都放在这个方法中:

public void initui()
{
setContentView(R.layout.main);
if (wv == null) wv = new WebView(this);
((LinearLayout)findViewById(R.id.webviewPlace)).addView(wv);
findViewById(R.id.home).setOnClickListener(this);
}

如果 webview 不存在,它将被创建并在 setContentView(R.layout.main) 之后被添加到布局中。您需要的任何其他 UI 自定义都在此之后出现。

并在 onConfigurationChanged 中:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
((LinearLayout)findViewById(R.id.webviewPlace)).removeAllViews();
super.onConfigurationChanged(newConfig);
initUI();
}

onConfigChange 中,webview 从旧占位符中删除,initui 将被调用,这会将其添加回新布局。

oncreate() 中调用initui() 第一次初始化ui。

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initUI()
}

我希望它能对某人有所帮助。

关于android - 在方向更改时替换布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com