画面の向き
実機の向きは定数で準備されています。
項目 | 内容 | 縦向き | ActivityInfo.SCREEN_ORIENTATION_PORTRAIT | 横向き | ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE |
これを用いて画面の向きを変更することができます。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Button;
//相対的レイアウト(RelativeLayout)を使用する宣言
import android.view.View;
import android.widget.RelativeLayout;
//クリックイベント用に追加
import android.view.View.OnClickListener;
//ボタンを宣言
import android.widget.Button;
//Screenの向き
import android.content.pm.ActivityInfo;
//ログ出力の宣言
import android.util.Log;
public class MainActivity extends AppCompatActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//座標の初期設定
int x=0;
int y=0;
int width=0;
int height=0;
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
x=100;
y=50;
width=200;
height=80;
Button btn1=new Button(this);
//配置を設定
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
btn1.setText("実機の向き");
btn1.setOnClickListener(this);
layout.addView(btn1, obj1);
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
setOrientation();
}
private void setOrientation()
{
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();
//非推奨
int orientation2 = display.getOrientation();
Log.d("getRotation", String.valueOf(orientation) );
Log.d("getOrientation", String.valueOf(orientation2) );
switch (orientation)
{
case 0:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.d("set", "SCREEN_ORIENTATION_LANDSCAPE" );
break;
case 1:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Log.d("set", "SCREEN_ORIENTATION_PORTRAIT" );
break;
}
}
//レイアウトを決定するオブジェクトを生成し渡します
public RelativeLayout.LayoutParams getLayoutObject(int width,int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
画面の向きを取得するためDisplayを使用しています。
向きは「getRotation」を用いて取得します。
displayを使用して現在の画面の向きが縦向きか?横向きか?を判定します。
※前回の向きが縦であれば横、前回の向きが横であれば縦の向きにします。
そのため、switch文では前回の向きと反対の向きになるようにしています。
(例)前回が「0」(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)であれば
「SCREEN_ORIENTATION_LANDSCAPE」に向きを修正します。
これにより、何度繰り返しても縦と横の向きに入れ替わります。
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();
switch (orientation)
{
case 0:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.d("set", "SCREEN_ORIENTATION_LANDSCAPE" );
break;
case 1:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Log.d("set", "SCREEN_ORIENTATION_PORTRAIT" );
break;
}
|
値 | 向き | 0 | ActivityInfo.SCREEN_ORIENTATION_PORTRAIT | 1 | ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE |
実行結果
|
|