重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章为大家分享android使用activity锁定手机横屏的方法。文章还介绍了activity的其他运用方式,希望大家通过这篇文章能有所收获。
创新互联建站长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为慈利企业提供专业的成都做网站、网站设计,慈利网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
我们可以通过以下两种方式实现锁定Activity运行时屏幕的方向:
修改Android/app/mainfests/AndroidMainfest.xml下的配置文件如下:
13 9 1912 1813 1714 15 16
1 import android.content.pm.ActivityInfo; 2 import android.os.Bundle; 3 import android.support.annotation.Nullable; 4 import android.support.v7.app.AppCompatActivity; 5 /** 6 * Created by panchengjia on 2016/12/9. 7 */ 8 public class Test extends AppCompatActivity { 9 @Override10 protected void onCreate(@Nullable Bundle savedInstanceState) {11 super.onCreate(savedInstanceState);12 setContentView(R.layout.activity_main2);13 //添加setRequestedOrientation方法实现锁定横屏(portrait为保持竖屏,landscape为保持横屏)14 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);15 }16 }
现在第一种需求通过修改配置文件以及java代码的方式实现,但这里要注意的是当同时在配置文件以及java文件中设置了方向锁定时,系统会以配置文件设置为准(可以理解为配置文件优先级高于java代码)
演示中,我们通过记录按钮的点击次数(土司)来判断数据是否被保存
我们发现当屏幕(Acticity)由横屏转为竖屏时,数据未实现保存,继续从0开始计数点击次数。
保存数据后,点击数土司会继续竖屏状态的数据更新,而不是从零重新开始。
针对数据保存我们同样有两种方法实现,分别为在java代码中使用onSaveInstanceState()方法以及在属性。
下面我们详细分析这两种方法的实现:
实现代码如下(这里写了Activity的全部生命周期,并打印log用于分析性能):
1 import android.support.v7.app.AppCompatActivity; 2 import android.os.Bundle; 3 import android.util.Log; 4 import android.view.View; 5 import android.widget.Toast; 6 /** 7 * Created by panchengjia on 2016/12/9. 8 */ 9 public class Main2Activity extends AppCompatActivity {10 int num=1;//初始点击次数为111 @Override12 protected void onCreate(Bundle savedInstanceState) {13 super.onCreate(savedInstanceState);14 setContentView(R.layout.activity_main2);15 if(savedInstanceState!=null){16 num=savedInstanceState.getInt("data");17 }18 Log.i("Tag","onCreate");19 }20 //设置点击事件土司记录数据21 public void show(View v){22 Toast.makeText(this, num++ +"", Toast.LENGTH_SHORT).show();23 }24 @Override25 protected void onSaveInstanceState(Bundle outState) {26 super.onSaveInstanceState(outState);27 outState.putInt("data",num);28 Log.i("Tag","onSaveInstanceState");29 }30 @Override31 protected void onStart() {32 super.onStart();33 Log.i("Tag","onStart");34 }35 @Override36 protected void onResume() {37 super.onResume();38 Log.i("Tag","onResume");39 }40 @Override41 protected void onRestart() {42 super.onRestart();43 Log.i("Tag","onRestart");44 }45 @Override46 protected void onPause() {47 super.onPause();48 Log.i("Tag","onPause");49 }50 @Override51 protected void onStop() {52 super.onStop();53 Log.i("Tag","onStop");54 }55 @Override56 protected void onDestroy() {57 super.onDestroy();58 Log.i("Tag","onDestroy");59 }60 }
功能实现的核心代码为protected void onSaveInstanceState(Bundle outState)方法。Activity旋转前后的Log如下:
从Log中可以得知屏幕(Acticity)旋转时,会销毁之前的Activity,然后重建旋转后的Activity。
在AndroidManifest.xml中添加configChanges属性,如下:
1 24 10 2113 19 2014 1815 16 17
在java中添加对应的onConfigurationChanged()方法用于Log打印分析,方法本身在功能实现上无实际意义:
1 @Override2 public void onConfigurationChanged(Configuration newConfig) {3 super.onConfigurationChanged(newConfig);4 Log.i("Tag","onConfigurationChanged");5 }
屏幕旋转前后Log如下(演示两次旋转):
从Log中可以得知屏幕(Acticity)旋转时,使用第二种方法保存数据不会销毁Activity,不用重复的销毁建立Activity从而达到优化内存性能的目的。建议使用这种方法
上文描述的就是android使用activity锁定手机横屏的方法,具体使用情况还需要大家自己动手实验使用过才能领会。如果想了解更多相关内容,欢迎关注创新互联行业资讯频道!