我在select TableA.CodeA Code,
case when
TableB.CodeB is null then 0
else 1
end Value
from TableA left outer join TableB on TableA.CodeA = TableB.CodeB
,xml
和layout-normal
中有一个layout-large
。我要做的是使用特定layout-land
中提供的xml
。
我已经在这里搜索过,这就是我已经尝试过的。
1)我使用了不同的orientation
名称但名称相同layout
并覆盖ids
并在其中设置onConfigurationChanged
。这是我的代码
layout
确实发生了变化,但是当屏幕旋转时,@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_login2);
}
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_login );
}
}
中的输入数据消失了。我尝试使用EditText
保存onSaveInstanceState
但仍然相同。看起来它会破坏活动并创建一个新的活动,其中instance
中初始化的所有窗口小部件都消失了。
2)然后我找到了onCreate
,只是将景观布局放在那里,使用相同的布局名称,例如layout-land
和layout-normal
示例
layout-large
res/layout-land -> activity_login.xml
res/layout-normal-> activity_login.xml
并删除代码上的res/layout-large-> activity_login.xml
但仍无法正常工作。
在onConfigurationChanged
AndroidManifest
中,我提出了
LoginActivity
屏幕旋转时是否还要更改布局?先感谢您。
答案 0 :(得分:2)
"屏幕尺寸"限定符的优先级高于" orientation"预选赛。 https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources
Android支持多个配置限定符,您可以通过用破折号分隔每个限定符来将多个限定符添加到一个目录名称。表2按优先顺序列出了有效的配置限定符
假设您有这些文件:
res/
layout-normal/
layout.xml
layout-land/
layout.xml
如果你有一个普通的屏幕尺寸设备,无论你是使用肖像还是风景都无关紧要。始终会layout-normal
选择layout-land
。
你可以通过两种不同的方式解决这个问题。
首先,你可以把你的"默认"普通layout
目录中的布局(而不是layout-normal
)。所以你的文件将是
res/
layout/
layout.xml
layout-land/
layout.xml
其次,您可以组合限定符,以便明确区分纵向和横向。所以你的文件将是
res/
layout-normal/
layout.xml
layout-normal-land/
layout.xml
答案 1 :(得分:1)
我认为您可能忽略了layout-land
文件夹的要点。应该是这样的情况:当设备旋转到横向时,您在那里指定的任何布局(例如some_activity.xml
)将自动使用。您可以将布局文件命名为potrait版本已使用的相同名称。布局文件本身也可以使用相同的ID来命名出现的各种小部件。
关于在旋转设备时丢失某些UI状态,您可能必须覆盖onSaveInstanceState(Bundle savedInstanceState)
并在旋转发生时从UI保存一些状态。这并没有与显示哪个布局文件有关。
答案 2 :(得分:0)
首先,您不需要创建另一个.xml
,例如activity_login2
,您可以使用相同的activity_login.xml
。
Android有默认文件夹 / res / layout ,其中包含所有布局。因此,无论何时旋转设备,它都将使用相同的 activity_login.xml 文件。
您可以添加新文件夹/ res / layout-land,将 activity_login.xml 复制到其中并进行必要的调整。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_login2); // it will use .xml from /res/layout
}
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_login); // it will use xml from /res/layout-land
}
}