找出正常使用的 Android 设备是纵向还是横向?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3674933/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Find out if Android device is portrait or landscape for normal usage?
提问by joynes
Is there anyway to find out if a device is portrait or landscape by default? In that I mean how you normally use the device.
有没有办法确定设备默认是纵向还是横向?我的意思是您通常如何使用该设备。
Most phones have a portrait screen for normal usage but is there some flag for finding that out?
大多数手机都有一个正常使用的纵向屏幕,但是否有一些标志可以找到它?
回答by Hazem Farahat
You can do this by:
您可以通过以下方式执行此操作:
For Lanscape
蓝景
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
}
For Portrait
人像用
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
//Do some stuff
}
Check: http://developer.android.com/reference/android/content/res/Configuration.html#orientation
检查:http: //developer.android.com/reference/android/content/res/Configuration.html#orientation
回答by Hasib Akter
It's simple, Just a If-Else
block:
很简单,只是一个If-Else
块:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// landscape
} else {
// portrait
}
回答by Cícero Moura
In your actvity, do this:
在您的活动中,请执行以下操作:
if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
for example...
例如...
回答by DSlomer64
Thanks to @Codeversed, whose excellent Answer is very close to working (but does NOT as shown), I have a MainActivity
that works well. All that need be done is move .enable
to where it can be executed OUTSIDE the on
block, such as immediately after declaration of myOrientationEventListener
.
感谢@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();
}
}
回答by Herry
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();
}
}
}
You can try this code for checking whether device is in landscape or in portrait.
您可以尝试使用此代码来检查设备是横向还是纵向。
回答by Codeversed
I am not sure if this will help but this is a quick example I wrote that will show you how to have a listener...which will allow you to figure out which orientation you are in.
我不确定这是否会有所帮助,但这是我写的一个快速示例,它将向您展示如何拥有一个听众……这将使您能够确定自己所处的方向。
...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();
}...
回答by Ayaz Alifov
I had a similar issue. Solved it by comparing values of rotation and orientation. There is no need to use sensors or any listeners, just call isDefaultLandscape
method whenever you wish.
我有一个类似的问题。通过比较旋转和方向的值来解决它。无需使用传感器或任何侦听器,只需随时调用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;
}
}
}
回答by codebyjames
// 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;
}