如何获取屏幕的状态以及横屏与竖屏自动切换

来源:互联网 发布:无心捏脸数据 编辑:程序博客网 时间:2024/06/09 08:09

demo1:获取屏幕的状态 ,横屏与竖屏自动切换fragment

  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. //获取屏幕的宽度和高度 适配不同的fragment
  7. DisplayMetrics outMetrics=new DisplayMetrics();
  8. getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
  9. int width=outMetrics.widthPixels;
  10. int height=outMetrics.heightPixels;
  11. RelativeLayout layout=(RelativeLayout)findViewById(R.id.layoutId);
  12. //要借助此对象管理fragment对象
  13. FragmentManager fm= getFragmentManager();
  14. FragmentTransaction ft=fm.beginTransaction();
  15. //使用不同的fragment
  16. if(height>width){
  17. ft.replace(R.id.layoutId, new Fragment01(),"tag");
  18. }else{
  19. ft.replace(R.id.layoutId, new Fragment02(),"tag");
  20. }
  21. //可选:将fragment添加到回退栈
  22. //ft.addToBackStack(null);
  23. ft.commit();
  24. }
  25. @Override
  26. protected void onResume() {
  27. super.onResume();
  28. //根据tag找到对应的fragment
  29. Fragment f=getFragmentManager().findFragmentByTag("tag");
  30. Log.i("TAG", "f="+f);
  31. }
  32. }

demo2:Tab+fragment 实现屏幕旋转保存数据

  1. public class MainActivity extends Activity {
  2. ActionBar bar;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. bar=getActionBar();
  8. bar.setDisplayShowHomeEnabled(false);
  9. bar.setDisplayShowTitleEnabled(false);
  10. //设置为tab导航
  11. bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
  12. //添加tab
  13. bar.addTab(bar.newTab().setText("tab01").setTabListener(
  14. new MyTabListener(this,Fragment01.class.getName(),"A")));
  15. bar.addTab(bar.newTab().setText("tab02").setTabListener(
  16. new MyTabListener(this,Fragment02.class.getName(),"B")));
  17. }
  18. @Override
  19. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  20. super.onRestoreInstanceState(savedInstanceState);
  21. if(savedInstanceState!=null){
  22. int pos=savedInstanceState.getInt("posKey");
  23. bar.setSelectedNavigationItem(pos);
  24. }
  25. }
  26. private class MyTabListener implements TabListener{
  27. private Context context;
  28. private String className;
  29. private Fragment frg;
  30. private String tag;
  31. public MyTabListener(Context context,String className,String tag){
  32. this.context=context;
  33. this.className=className;
  34. this.tag=tag;
  35. //检测在当前activity是否已经有存在的fragment
  36. Fragment frg=getFragmentManager().findFragmentByTag(tag);
  37. if(frg!=null&&!frg.isDetached()){
  38. FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();
  39. beginTransaction.detach(frg);
  40. beginTransaction.commit();
  41. }
  42. }
  43. @Override
  44. public void onTabSelected(Tab tab, FragmentTransaction ft) {
  45. if(frg==null){
  46. frg=Fragment.instantiate(context, className);
  47. ft.add(R.id.layout,frg,tag);
  48. }else{
  49. ft.attach(frg);
  50. }
  51. }
  52. //没有选中的那个在旋转需要解除关联
  53. @Override
  54. public void onTabUnselected(Tab tab, FragmentTransaction ft) {
  55. if(frg!=null){
  56. ft.detach(frg);
  57. }
  58. }
  59. @Override
  60. public void onTabReselected(Tab tab, FragmentTransaction ft) {
  61. }
  62. }
  63. @Override
  64. protected void onSaveInstanceState(Bundle outState) {
  65. super.onSaveInstanceState(outState);
  66. int pos=bar.getSelectedTab().getPosition();
  67. outState.putInt("posKey", pos);
  68. }
  69. }
0 0
原创粉丝点击