在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>
运行结果图:
竖排:
横排:
- 大小: 13.3 KB
- 大小: 15.5 KB
分享到:
相关推荐
开发者还可以通过API动态改变Activity的屏幕方向。例如,以下代码展示了如何使用`setRequestedOrientation()`方法切换横屏和竖屏: ```java public void apiChangeOrientation() { // 获取当前屏幕方向 int ...
Android 屏幕旋转实例,改变屏幕方向,这个和平时的锁定屏幕方向有关联,其基本的实现思路如下: public void onConfigurationChanged(Configuration newConfig) { Toast.makeText(this, "系统的屏幕方向发生...
如果想要在运行时动态改变屏幕方向,可以调用Activity的`setRequestedOrientation()`方法。例如,当用户点击一个按钮时,可以切换屏幕方向: ```java Button btn = findViewById(R.id.btn); btn.setOnClickListener...
然而,如果希望在运行时动态改变屏幕方向,就需要编程的方式来实现。这个小工程中可能包含一个名为`OrientationChanger`的类,它可能提供了如下功能: 1. **获取当前屏幕方向**:使用`Display`对象的`getRotation()...
【用于Android设备默认屏幕方向自适应的电路的制作方法】 ...这种自适应电路的实施方式是通过跳帽的连接状态改变电路的电平输出,从而指示屏幕的方向,实现了硬件层面的屏幕方向识别,极大地优化了生产流程和用户体验。
本篇文章将深入探讨如何控制Android Activity的屏幕方向,实现始终横屏、全屏显示以及如何处理屏幕方向改变时Activity的销毁与重建问题。 1. **屏幕始终横屏或竖屏** 在AndroidManifest.xml中,我们可以为特定的...
JavaApk源码中可能包含了对`Activity`的重写,特别是`onConfigurationChanged`方法,这是Android系统在检测到设备配置改变(如屏幕方向变化)时调用的。开发者可以在这个方法中添加逻辑,防止在屏幕方向锁定时改变...
2. **动态改变屏幕方向**:除了静态配置,还可以在代码中动态改变Activity的屏幕方向。通过调用`setRequestedOrientation()`方法,传入对应的屏幕方向常量,如`ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE`或`...
然而,单纯的屏幕方向改变可能导致`onCreate()`方法被多次调用,这在某些情况下会导致不必要的资源重新加载或状态丢失,影响应用性能和用户体验。 #### 四、解决屏幕翻转带来的问题 为了避免屏幕翻转过程中`...
除了在AndroidManifest.xml中静态配置,开发者还可以在代码中动态改变屏幕方向: ```java Activity activity = ...; activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 横屏 ...
通过滑动屏幕,你可以看到箭头根据手指移动的方向变化。这种自定义控件的实现方式为开发者提供了更大的灵活性,可以根据项目需求进一步扩展功能,如添加动画效果、触摸反馈等。 总之,创建一个自定义的圆盘方向按钮...
Android系统支持四种主要的屏幕方向:portrait(竖屏)、landscape(横屏)、reverse portrait(反向竖屏)和reverse landscape(反向横屏)。这些方向可以通过设备传感器或用户手动切换。默认情况下,Android会根据...
这些事件可以用来改变壁纸的行为,比如在这个例子中,可能用户触摸屏幕时会改变立方体的旋转速度或方向。 在Android项目中,动态壁纸的配置文件一般位于`res/xml/wallpaper.xml`,这里会定义壁纸服务的相关元数据,...
3. **重写Activity的onConfigurationChanged()**:为了在屏幕方向改变时不重新创建Activity,需要在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges="orientation|screenSize"`,然后在...
7. **代码实现**:在按钮的槽函数中,可以调用Android系统的API来改变屏幕方向,例如`QtAndroidPrivate::runOnAndroidThread()`来执行Android原生代码,然后使用Java层的方法来旋转屏幕。 8. **生命周期管理**:...
- 屏幕方向的改变通常会导致Activity的重新创建。 - 为了避免数据丢失,开发者需要在Activity的生命周期方法中保存和恢复状态。 - 例如,可以使用`onSaveInstanceState`方法保存状态,在`onCreate`方法中恢复状态...
在Android应用开发中,自适应屏幕方向和大小是至关重要的,因为Android设备有着广泛的屏幕尺寸和比例。这个压缩包文件“Android项目关于自适应屏幕方向和大小的一些经验”可能包含了如何处理不同屏幕尺寸和方向的...
1. **配置变更(Configuration Changes)**:在Android中,屏幕旋转被视作一种配置变更,因为它改变了设备的屏幕方向,从而可能影响应用的界面布局和行为。例如,从横屏切换到竖屏,屏幕宽度和高度会发生变化。 2. **...