我正在使用一个实时应用程序,其中包含应用程序中的选项卡。当我尝试在纵向和横向之间切换方向时,我有代码显示横向的单独布局。为此,我使用了onConfigurationChanged
方法,如下所示
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
setContentView(R.layout.eventslist);
}else if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.eventstimeline);
}
}
同样在该特定活动的清单文件中,我使用了两个属性,如下所示
android:screenOrientation="sensor"
android:configChanges="orientation|keyboardHidden"
但是当我旋转设备时,我无法看到我在onConfigurationChanged
中指定的横向模式的单独布局。此外,我不希望在横向模式下看到选项卡。对此有任何想法。
答案 0 :(得分:5)
在参考资料中,您可以为每个方向定义不同的布局,类似于具有屏幕密度的drawable。
在布局文件夹旁边,您可以将布局放在:
中布局端口:纵向布局
layout-land :横向布局
当然,您应该为这些布局使用相同的名称,与drawables相同。
然后只需setContentView(R.layout。 thatlayout );
答案 1 :(得分:1)
如果您不关心在更改方向时重新创建活动,只需使用相同的名称为portait和landscape创建布局xml文件,并将一个用于portait在布局文件夹中,将一个用于横向布局-land文件夹。 然后就可以了
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xml_with_same_name_for_landscape_and_portait);
}
如果您不希望每次方向发生变化时都会减少并重新创建您的活动,那么您似乎表现得很好,但是 Activity doc说:
但是,如果配置更改涉及您未处理的任何内容,则仍将重新启动活动并且不会调用onConfigurationChanged(Configuration)。
因此,你的问题是onConfigurationChanged()永远不会被调用。在这种情况下,清单中的chek yout android:configChanges属性。