在androd中要通过程序改变屏幕显示的方向,必须覆盖setRequestOrientation()方法,若要取得目前屏幕方向则需要用到getRequestOrientation()方法。
本例子实现了简单的改变屏幕方向,通过一个按钮点击事件,判断当前的屏幕方向,例如竖排(PORTRAIT),则改为横排(LANDSCAPE);
本程序重写setRequestOrientation()方法,起目的是为了要捕捉设置屏幕放向的同时所触发的事件,并在更改的时候以Toast显示要更改的方向。
程序一开始闲判断getRequestOrentation()的值是否为-1,表示在Activity属性里没有设置android:screenOrientation="portrait",这意味着即使点击按钮也无法判断屏幕的方向,不会进行更改方向的事件了。
布局文件main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <Button android:id="@+id/button01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/button_text01"/> </LinearLayout>
OrientationActivity.java
public class OrientationActivity extends Activity {
private TextView tv;
private Button button;
private Resources rs;
private Display display;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
display = getWindow().getWindowManager().getDefaultDisplay();
tv = (TextView) this.findViewById(R.id.textView01);
button = (Button) this.findViewById(R.id.button01);
rs = this.getResources();
if(getRequestedOrientation() == -1){
tv.setText(rs.getText(R.string.err_msg));
}
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
/* 方法一 */
if(getRequestedOrientation() == -1){
tv.setText(rs.getText(R.string.err_msg));
}else{
/* 方法一 */
// if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
// /* 若当前为横排则改为竖排 */
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// }else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
// /* 若当前为竖排则改为横排 */
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// }
int h = display.getHeight();
int w = display.getWidth();
if(w < h){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
});
}
/* (non-Javadoc)
* @see android.app.Activity#setRequestedOrientation(int)
*/
@Override
public void setRequestedOrientation(int requestedOrientation) {
switch (requestedOrientation) {
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
MakeTextToast.showToast(OrientationActivity.this,rs.getText(R.string.msg_2).toString() , true);
break;
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
MakeTextToast.showToast(OrientationActivity.this,rs.getText(R.string.msg_2).toString() , true);
break;
default:
break;
}
super.setRequestedOrientation(requestedOrientation);
}
/* (non-Javadoc)
* @see android.app.Activity#getRequestedOrientation()
*/
@Override
public int getRequestedOrientation() {
// TODO Auto-generated method stub
return super.getRequestedOrientation();
}
}
MakeTextToast.java
public class MakeTextToast {
/**
* 显示Toast
* @param context
* @param msg 信息
* @param isLong 显示时间长短
*/
public static void showToast(Context context,String msg,boolean isLong){
if(isLong){
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
}
Manifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".OrientationActivity"
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>
</application>
运行结果图:
竖排:
横排: