デバイスがデフォルトでポートレートかランドスケープかを調べる方法はありますか?その中で、私はあなたが通常どのようにデバイスを使用するかを意味します。
ほとんどの携帯電話には通常の使用のための縦画面がありますが、それを見つけるためのフラグはありますか?
これを行うには:
Lanscapeの場合
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
}
ポートレートの場合
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
//Do some stuff
}
チェック: http://developer.Android.com/reference/Android/content/res/Configuration.html#orientation
@Codeversedのおかげで、その優れた回答は動作に非常に近い(ただし表示されていない)ので、うまく機能するMainActivity
があります。必要なのは、移動.enable
は、on
の宣言直後など、myOrientationEventListener
ブロックの外側で実行できる場所に移動します。
import Android.app.Activity;
import Android.hardware.SensorManager;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.OrientationEventListener;
public class MainActivity extends Activity
{
public static boolean PORTRAIT_MODE = true;
OrientationEventListener myOrientationEventListener ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myOrientationEventListener = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL)
{
@Override
public void onOrientationChanged(int orientation)
{
PORTRAIT_MODE = ((orientation < 100) || (orientation > 280));
Log.w("Orient", orientation + " PORTRAIT_MODE = " + PORTRAIT_MODE);
}
};
Log.w("Listener", " can detect orientation: " + myOrientationEventListener.canDetectOrientation() + " ");
myOrientationEventListener.enable();
}
}
あなたの活動では、これを行います:
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
例えば...
package com.Android.portraitandlandscape;
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Display;
import Android.widget.Toast;
public class PortraitLandScape extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Log.v("log_tag", "display width is "+ width);
Log.v("log_tag", "display height is "+ height);
if(width<height){
Toast.makeText(getApplicationContext(),"Device is in portrait mode",Toast.LENGTH_LONG ).show();
}
else{
Toast.makeText(getApplicationContext(),"Device is in landscape mode",Toast.LENGTH_LONG ).show();
}
}
}
このコードを試して、デバイスが横向きか縦向きかを確認できます。
シンプル、ちょうどIf-Else
ブロック:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// landscape
} else {
// portrait
}
同様の問題がありました。回転と方向の値を比較して解決しました。センサーやリスナーを使用する必要はありません。いつでもisDefaultLandscape
メソッドを呼び出すだけです。
private boolean isDefaultLandscape(final Context context)
{
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int orientation = context.getResources().getConfiguration().orientation;
switch (rotation)
{
case Surface.ROTATION_180:
case Surface.ROTATION_0:
{
return orientation == Configuration.ORIENTATION_LANDSCAPE;
}
default:
{
return orientation == Configuration.ORIENTATION_PORTRAIT;
}
}
}
これが役立つかどうかはわかりませんが、これは私が書いた簡単な例であり、リスナーをどのように持っているかを示します...
...textviewOrientation = (TextView)findViewById(R.id.textView1);
myOrientationEventListener = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int arg0) {
textviewOrientation.setText("Orientation: " + String.valueOf(arg0));
myOrientationEventListener.enable();
if ((arg0 < 100) || (arg0 > 280)){
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
};...
...@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
myOrientationEventListener.disable();
}...
// Current orientation
public boolean landscape = false;
public boolean isLandscape(){
DisplayMetrics displaymetrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
if(width<height){
landscape = false;
}
else{
landscape = true;
}
return landscape;
}