android軟件開發:橫豎屏

獲取屏幕方向
Configuration newConfig = getResources().getConfiguration();
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
//橫屏
}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
//豎屏
}else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){
//鍵盤沒關閉。屏幕方向爲橫屏
}else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){
//鍵盤關閉。屏幕方向爲豎屏
}
橫豎屏切換問題
很多沒有購買真機的網友不知道如何切換Android
模擬器到橫屏顯示。常規的顯示爲HVGA-P(port),即分
辨率爲320x480
如果使用橫屏(land)。如果模擬器尚未啓動,可以在Eclipse
的項目Run as=>Open Run
Dialog
對話框中設置,如果android
模擬器已經啓動後,可以使用快捷鍵F12
或Ctrl+F11
或小鍵盤7、8
來切換。當然是用命令行僅僅啓動模擬器可以使用參數emulator.exe -skin HVGA-L 來啓動。
需要注意的是,切換land 或port 可以通過資源文件來讓界面自適應窗體,但程序可能會重載onCreate,
避免的方法可以通過在androidmanifest.xml 文件中重新定義方向,以及根據Activity
的重寫
onConfigurationChanged(Configuration newConfig)方法來控制,相關的可以在Android SDK
中獲取到。
開發遊戲的時候,有些遊戲是隻能橫屏玩的,所以手機豎立放置的時候,要保持遊戲畫面
依然橫屏。要做到這個要求其實很簡單,在AndroidManifest.xml 裏面配置一下就可以了。
加入這一行android:screenOrientation="landscape"。
例如(landscape 是橫向,portrait 是縱向):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ray.linkit"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".GamePlay"
android:screenOrientation="portrait"></activity>
<activity android:name=".OptionView"
android:screenOrientation="portrait"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
另外,android 中每次屏幕的切換動會重啓Activity,所以應該在Activity
銷燬前保存當前活動的狀態,在Activity 再次Create 的時候載入配置,那樣,
進行中的遊戲就不會自動重啓了!
案例
package com.cn;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class LayoutTest extends Activity {
private static final String tag = "LayoutTest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(tag, "********test********");
// LOGV("********test********");
if(this.getResources()
.getConfiguration()
.orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.e(tag, "^^^^^^^^^^this is a landscape *************");
}
// TextView tx = (TextView)findViewById(R.id.txt);
// tx.setKeepScreenOn(true);
// if(this.getResources())
setContentView(R.layout.main);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if(this.getResources()
.getConfiguration()
.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.e(tag, "********this is a portrait");
}else if(this.getResources()
.getConfiguration()
.orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.e(tag, "this is a landscape *************");
}
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cn"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".LayoutTest"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden" >
<!-- android:screenOrientation="landscape">
-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
發佈了81 篇原創文章 · 獲贊 65 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章