如何在android中创建屏幕方向感知?

时间:2011-05-01 16:40:59

标签: java android layout

如何检测到用户已将显示屏的方向从纵向更改为横向,反之亦然?

Android应用程序必须调整为新方向。系统应该向所有打开的应用程序发送更改方向消息,以便他们可以进行调整。我在文档中找不到任何相关内容?对不起,如果我从其他地方复制这些声明,但我是kinna new ina android / java,有人可以指导我吗?

它只是我在多个标签中的首选项屏幕之一,但我只是想在手机位置发生变化时仅更改屏幕方向...

public class Tab2Activity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.tab2);
    }

}

2 个答案:

答案 0 :(得分:1)

当方向发生变化时,Android会自动重新创建(销毁然后创建)您的活动。如果您想要横向的特殊布局,可以在layout-land文件夹中创建一个特殊的资源文件,该文件将在重新创建活动后加载。

另一方面,如果要覆盖默认行为以便在方向更改时可以执行自定义操作,则可以覆盖onConfigurationChanged方法,如下所示:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        //do something if portrait...
    }
}

答案 1 :(得分:0)

http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged%28android.content.res.Configuration%29

编辑:在代码中(将此添加到您的活动中):

@Override
public void onConfigurationChanged(Configuration _newConfig){
        super.onConfigurationChanged(_newConfig);
        int height = getWindowManager().getDefaultDisplay().getHeight();
        int width = getWindowManager().getDefaultDisplay().getWidth();
        if(width > height){
                // landscape
        }else{
                // portrait
        }
}