2013-02-21 3 views
0

я следующий кусок кода в мое приложение, чтобы получить ширину и высоту экрана:Android | Получение высоты экрана в ширину и экрана шириной, как высота

screenHeight = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getHeight(); 
screenWidth = (short) Activity.getWindow().getWindowManager().getDefaultDisplay().getWidth(); 

И в AndroidManifest, у меня есть:

<activity 
     android:name="com.test.MyActivity" 
     android:configChanges="keyboardHidden|orientation" 
     android:launchMode="singleTask" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
</activity> 

Теперь, для устройства с разрешением экрана 1280x700, я ожидаю, что переменная screenWidth всегда будет иметь значение 1280, а screenHeight - 700. Это независимо от того, как пользователь может держать телефон.

Но все же иногда получается ширина экрана, равная 700, а высота равна 1280. Почему? Должен ли мой файл манифеста обеспечивать ориентацию моего приложения, чтобы он всегда оставался ландшафтом?

+0

Я не понимаю, как это проблема. ширина/высота относительно ориентации экрана, да. как только вы это знаете, вам просто нужно использовать информацию соответственно. – njzk2

ответ

0

android:screenOrientation="landscape"

это вызывает вопрос здесь, если вам нужно решить проблему, то сделать его портрет.

И если вы не хотите ограничивать себя, тогда проверьте ориентацию кода и используйте свой код дальше.

Не код, а идея, например.

if(getOrientation=="portrait") 

    determine height and width. 

else 
    ... 
0

Это несколько сложнее часть Android. Вы не должны полагаться на такие методы из-за множества вещей, которые могут происходить асинхронно в вашем приложении. Если ваше приложение вынуждено работать в альбомной ориентации, но у вас есть обычный телефон, который, вероятно, имеет портрет как ориентацию по умолчанию для дома и экрана блокировки, у вас проблемы. Каждый раз, когда вы блокируете экран или запускаете новый экземпляр своего приложения, вы не можете быть уверены, что указанная ширина и высота находятся в альбомной или портретной ориентации из-за оживления анимации вращения.

Чтобы правильно определить разрешение, вам нужно выяснить, какую ориентацию вы на самом деле проверяете. Вы можете использовать акселерометр, OrientationEventListener, OnConfigurationChanged и размер rootView. Тем не менее, я думаю, что лучший способ справиться с этой проблемой - просто поменять ширину и высоту в коде, поэтому ширина всегда больше. Просто так.

0

поставить строку в манифесте тег активности

android:configChanges="keyboardHidden|orientation" 

переопределить метод в вашей деятельности

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

и поместить строку в OnCreate метод()

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAP); 

приложение останется только в ландшафте. :)