对方向改变做点什么

时间:2016-08-14 14:53:44

标签: android

我希望在用户旋转屏幕时更改某些内容,例如变量值。

我知道我可以使用以下内容进行定位:

this

但我不想定义if portrait do this, if landscape do this

我想抓住当前的方向并开始做我想要的事情。

3 个答案:

答案 0 :(得分:0)

在某些设备中,void onConfigurationChanged()可能会崩溃。用户将使用此代码获取当前屏幕方向。

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

并使用

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

答案 1 :(得分:0)

使用Activity的onConfigurationChanged方法。请参阅以下代码:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

您还必须编辑清单文件中的相应元素以包含android:configChanges只需看下面的代码:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

注意:对于Android 3.2(API级别13)或更高版本,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在开发API级别13或更高级别时因为方向更改而阻止运行时重新启动,则必须为API级别13或更高级别设置decalare android:configChanges =“orientation | screenSize”。

希望这会对你有所帮助.. :)

答案 2 :(得分:0)

您必须覆盖活动中的onConfigurationChanged方法并检查当前方向并执行您想要的任何操作

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Check orientation
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            DoSomethingForLandscapeOrientation();();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
           DoSomethingForPortraitOrientation(); 
    }
}


private void DoSomethingForLandscapeOrientation(){
    Log.i("Method For","Landscape");
}

private void DoSomethingForPortraitOrientation(){
    Log.i("Method For","Portrait");
}