編輯:高級開發
只要在androidmanifest.XML中對應的Activity中加入sensor屬性即可實現屏幕自動翻轉,如:
XML代碼
<
activity android:name=".demo"
android:label="@string/app_name"
android:screenOrIEntation="sensor"
>
<
activity android:name=".demo"
android:label="@string/app_name"
android:screenOrIEntation="sensor"
>
但是屏幕自動翻轉也伴隨著一個問題:當窗體切換或者布局切換時,Activity中OnCreate方法會被重復調用。一般OnCreate中會初始化一些數據,重復調用可能會產生意想不到的後果。解決方法如下:
在androidmanifest.XML中的activit元素加入configChanges這個屬性,比如
XML代碼
<
activity android:name="demo"
android:configChanges="orIEntation|keyboardHidden"
android:label="@string/app_name"
>
<
activity android:name="demo"
android:configChanges="orIEntation|keyboardHidden"
android:label="@string/app_name"
>
另外,在Activity的Java文件中重載onConfigurationChanged(Configuration newConfig)這個方法,這樣就不會在布局切換或窗口切換時重載onCreate等方法。代碼如下:
Java代碼
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
//TO-DO
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
//TO-DO
}
}
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
接上頁
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
//TO-DO
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
//TO-DO
}
}
還有界面設計方面的問題,android手機大部分是HVGA、WVGA的分辨率,屏幕視覺上比較“狹長”。往往豎著看很合適的布局,當屏幕橫向翻轉以後顯示會變得很別扭。當屏幕由豎直方向改變為橫向時,我們可以把界面中的控件由本來的垂直線性布局修改為橫向線性布局,這樣布局會更合理一些。我們可以自己寫一個布局類集成LinearLayout布局,通過覆蓋onMeasure方法來實現這種自動布局。當屏幕的寬高發生改變時,系統會調用 onMeasure方法。通過這個方法,我們可以獲得改變以後的寬高尺寸,從而來實現屏幕翻轉的自動布局,主要代碼如下:
Java代碼
/**
* 屏幕改變時自動調用
* @param widthMeasureSpec 改變後的寬度
* @param heightMeasureSpec 改變後的高度
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
/*寬度*/
int screenWith = VIEw.MeasureSpec.getSize(widthMeasureSpec);
/*高度*/
int screenHeight = VIEw.MeasureSpec.getSize(heightMeasureSpec);
/*豎直布局*/
if (screenWith < screenHeight)
{
this.setOrIEntation(VERTICAL);
for (int i = 0; i < getChildCount(); i++)
{
View childVIEw = getChildAt(i);
if (childVIEw instanceof CakyCanvas)
{
/*該控件占布局的2/5*/
LayoutParams params = new LayoutParams(screenWith,
screenHeight * 2/ 5
updateViewLayout(childVIEw, params);
}
else if (childVIEw instanceof CakyExplainCanvas)
{
/*該控件占布局的3/5*/
LayoutParams params = new LayoutParams(screenWith,
screenHeight * 3/ 5
接上頁
updateViewLayout(childVIEw, params);
}
}
}
/*橫向布局*/
else
{
this.setOrIEntation(HORIZONTAL);
for (int i = 0; i < getChildCount(); i++)
{
View childVIEw = getChildAt(i);
if (childVIEw instanceof CakyCanvas)
{
LayoutParams params = new LayoutParams(
screenWith * 2/ 5
screenHeight);
updateViewLayout(childVIEw, params);
}
else if (childVIEw instanceof CakyExplainCanvas)
{
LayoutParams params = new LayoutParams(
screenWith * 3/ 5
screenHeight);
updateViewLayout(childVIEw, params);
}
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
/**
* 屏幕改變時自動調用
* @param widthMeasureSpec 改變後的寬度
* @param heightMeasureSpec 改變後的高度
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
/*寬度*/
int screenWith = VIEw.MeasureSpec.getSize(widthMeasureSpec);
/*高度*/
int screenHeight = VIEw.MeasureSpec.getSize(heightMeasureSpec);
/*豎直布局*/
if (screenWith < screenHeight)
{
this.setOrIEntation(VERTICAL);
for (int i = 0; i < getChildCount(); i++)
{
View childVIEw = getChildAt(i);
if (childVIEw instanceof CakyCanvas)
{
/*該控件占布局的2/5*/
LayoutParams params = new LayoutParams(screenWith,
screenHeight * 2/ 5
updateViewLayout(childVIEw, params);
}
else if (childVIEw instanceof CakyExplainCanvas)
{
/*該控件占布局的3/5*/
LayoutParams params = new LayoutParams(screenWith,
接上頁
screenHeight * 3/ 5
updateViewLayout(childVIEw, params);
}
}
}
/*橫向布局*/
else
{
this.setOrIEntation(HORIZONTAL);
for (int i = 0; i < getChildCount(); i++)
{
View childVIEw = getChildAt(i);
if (childVIEw instanceof CakyCanvas)
{
LayoutParams params = new LayoutParams(
screenWith * 2/ 5
screenHeight);
updateViewLayout(childVIEw, params);
}
else if (childVIEw instanceof CakyExplainCanvas)
{
LayoutParams params = new LayoutParams(
screenWith * 3/ 5
screenHeight);
updateViewLayout(childVIEw, params);
}
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
在前面已經學會了 Android 的意圖(Intent),這是落實意圖,即一個對象。來自一個部件的消息傳遞到另一個組件使用 - 在應用程序或應用程序之外。因此這裡不需要從
lock; margin-left: auto; margin-right: auto; src=/School/UploadFiles_7810/201203/201
android系統手機推出這也許對大家而言是一種好事,但要提醒大家的是在方便的同時也確實給我們埋下了不少的隱患,無論什麼樣的系統,一定會有他的強大之處,也會有不少瑕疵,
Android應用程序的發布是一個過程,讓Android的應用程序提供給用戶。發布的Android應用程序開發過程的最後階段。一旦開發和全面測試Android應用程序,就