两种方式实现锁定Activity运行时屏幕的方向:

(1)通过修改AndroidMainfest.xml配置文件

修改Android/app/mainfests/AndroidMainfest.xml下的配置文件如下:<activity>节点的android:screenOrientation属性可以完成该任务//(portrait为保持竖屏,landscape为保持横屏)

(2)通过java代码实现:

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //通过代码设置屏幕方向,注意要在setContentView之前设置        //设置竖屏        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        //设置横屏        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        setContentView(R.layout.activity_main);    }}

两种方式实现Activity全屏显示:

(1)通过修改AndroidMainfest.xml配置文件

<application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen">

(2)通过java代码实现:

注意:java代码实现全屏显示分为两个步骤:

1.去标题栏

//通过代码去标题栏设置屏幕方向,注意要在setContentView之前设置         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                        WindowManager.LayoutParams.FLAG_FULLSCREEN);

2.去标题

//通过代码去标题设置屏幕方向,注意要在setContentView之前设置        requestWindowFeature(Window.FEATURE_NO_TITLE);

实现方式Dialog(对话框)实现Activity显示

"true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.DeviceDefault.Dialog"        >

旋转屏幕导致Activity重建怎么办?(最佳)

Android开发文档上专门有一小节解释这个问题。简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。 “屏幕方向”(orientation)是一个Configuration,通过查看Configuration类的javadoc可以看到其他Configuration还有哪些:如fontScale、keyboardHidden和locale等等。 当屏幕旋转时,这个Configuration就发生了改变,因此当前显示的Activity需要被重建,Activity对象会被终止,它的onPause()、onStop()和onDestroy()方法依次触发,然后一个新的Activity对象被创建,onCreate()方法被触发。假设屏幕旋转前,用户正在手机上填写一个注册表单,如果处理不当,用户会发现旋转后的表单变成空白的了,严重影响使用体验。

要解决这个问题有三种方法:

方法1:禁止旋转屏幕毫无疑问,这是最懒的办法了,相当于回避了本文提出的问题,方法如下看看就好:".MyActivity"          android:screenOrientation="portrait"          android:label="@string/app_name">方法2:旋转后恢复现场----------package com.example.scareenchange;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {    private EditText editText1;    private int i;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        editText1=(EditText) findViewById(R.id.editText1);        //注意一定要加if语句,不然程序异常        if(savedInstanceState!=null) {            //通过Bundle对象取出            int i=savedInstanceState.getInt("info");        }    }    public void button1(View v) {        editText1.setText((i++)+"");    }    /*     *这个方法会在重新创建Activity之前调用     *我们在这个方法里保存对象,以解决Activity重新创建问题     *     */    @Override    protected void onSaveInstanceState(Bundle outState) {        // TODO Auto-generated method stub        super.onSaveInstanceState(outState);        Toast.makeText(getApplicationContext(), i+"", 1000).show();        outState.putInt("info", i);    }}----------方法3:手工处理旋转,但也有办法让指定的Configuration改变时不重建Activity,方法是在AndroidManifest.xml里通过android:configChanges属性指定需要忽略的Configuration名字,例如下面这样:".MyActivity"          android:configChanges="keyboard|keyboardHidden|screenSize|orientation"          android:label="@string/app_name">这样设置以后,当屏幕旋转时Activity对象不会被销毁——作为替代,Activity的onConfigurationChanged()方法被触发,在这里开发者可以获取到当前的屏幕方向以便做必要的更新。既然这种情况下的Activity不会被销毁,旋转后Activity里正显示的信息(例如文本框中的文字)也就不会丢失了。
最佳实践考虑到旋转屏幕并不是使Activity被销毁重建的唯一因素,仍然推荐前文介绍过的方法:在onPause()里持久化Activity状态,在onCreate()里恢复现场,可以做到一举多得;虽然Google不推荐设置android:configChanges属性的方式,但如果你的Activity横向纵向共用同一个layout文件,方法3无疑是最省事的。

横竖屏切换不同的布局

如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。

可以通过以下两种方法来切换布局:

1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。

2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。

/** 1:竖屏   2:横屏 判断屏幕以旋转的方向 */    private int orientation;orientation=getResources().getConfiguration().orientation;

更多相关文章

  1. android切换屏幕时的生命周期
  2. Android 中Popwindow弹出菜单的两种方法实例
  3. Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
  4. Android中线程的使用方法
  5. android设备adb usb驱动安装方法
  6. Android中正确自适应屏幕翻转
  7. Android学习-RelativeLayout相对布局属性方法
  8. framework的调试与编译方法
  9. android在游戏中一直保持屏幕高亮

随机推荐

  1. android mvp快速开发框架介绍(dileber使用
  2. Android基础入门教程——8.1.3 Android中
  3. Android(安卓)开发环境搭建 ubuntu12.04
  4. Android(安卓)音视频流媒体相关知识导航
  5. java.io.IOException: Cleartext HTTP tr
  6. Android(安卓)应用退出后销毁apk进程
  7. Android应用开发之(你必须知道的“文件上
  8. Android开源库集锦
  9. ActivityManagerService架构剖析开篇
  10. android builde.gradle 动态配置域名