2016-04-12 6 views
0

В Android можно заблокировать ориентацию экрана, добавив в манифесте:Как заблокировать ориентацию экрана только для телефонов?

android:screenOrientation="landscape" 

Но можно зафиксировать в пределах размера?

Я хочу, чтобы мое приложение было заблокировано в портрете для формата телефона, и я хочу, чтобы пользователь не мог использовать как портрет, так и пейзаж в формате планшета.

Я попытался с размером экрана с помощью:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 

но это, кажется, не работает, когда я хочу, чтобы заблокировать экран от кода. Любая идея хорошего способа сделать это?

+0

Вы можете изменить ориентацию на Играешь setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); вы получаете проблемы с получением размера экрана? –

+0

First Upall определяет тип устройства (планшет или телефон), а затем устанавливает ориентацию Использование: http: //stackoverflow.com/questions/18268218/change-screen-orientation-programatically-using-a-button & http://stackoverflow.com/questions/11330363/how-to-detect-device-is-android-phone-android-tablet –

ответ

2

первый чек this ответ

теперь вы можете изменить ориентацию, как этот

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 
if (!tabletSize) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 
+1

R.bool.isTablet? –

+1

Вы проверили ссылку, которую я упоминаю в ответ? сначала проверьте эту ссылку, затем вы поймете, что такое R.bool.isTablet. –

0

Я не знаю точно его работу или не попробовать этот

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
if(manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE){ 
    return "Tablet"; 
}else{ 
    return "Mobile"; 
} 

или посмотреть этот раз Determine if the device is a smartphone or tablet?

1

Использования Это:

public static boolean isTablet(Context context) { 
    return (context.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
} 

public void setOrientation(Context context){ 
if(!isTablet(contex){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
} 
1

Вы можете получить диагональное значение устройства, следуя

DisplayMetrics metrics = new DisplayMetrics(); 
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); 

float yInches= metrics.heightPixels/metrics.ydpi; 
float xInches= metrics.widthPixels/metrics.xdpi; 
double diagonalInches = Math.sqrt(xInches*xInches + yInches*yInches); 

После этого вы можете проверить в соответствии с вашими потребностями, если вы хотите, чтобы размер 5,5.5,6 , 6,5 или выше, и изменение ориентации в соответствии с потребностями

if (diagonalInches>=6.5){ 
     // 6.5inch device or bigger 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    }else{ 
     // smaller device 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 
1

Вы можете создать собственный метод, чтобы проверить плотность тока экрана телефона,

public static boolean isTabLayout(Activity activity) { 

     DisplayMetrics metrics = new DisplayMetrics(); 
     activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     int widthPixels = metrics.widthPixels; 
     int heightPixels = metrics.heightPixels; 

     float scaleFactor = metrics.density; 

     float widthDp = widthPixels/scaleFactor; 
     float heightDp = heightPixels/scaleFactor; 

     float smallestWidth = Math.min(widthDp, heightDp); 

     if (smallestWidth > 720) { 
      //Device is a 10" tablet 
      return true; 
     } else if (smallestWidth > 600) { 
      //Device is a 7" tablet 
      return true; 
     } 
     return false; 
    } 

Чтобы заблокировать ориентацию экрана в портрете,

if (!isTabLayout(this)) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

или пейзаж,

if (!isTabLayout(this)) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } 
Смежные вопросы