歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android之在Layout中嵌入Activity

Android之在Layout中嵌入Activity

日期:2017/3/1 10:41:51   编辑:Linux編程

有些復雜的布局的實現,這裡可以提供一個思路,在布局中嵌入自己的Activity,直接貼源碼:

1.ActivityInLayoutDemoActivity.java:

  1. package com.zhf.ActivityInLayoutDemo;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import Android.app.ActivityGroup;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.view.Window;
  10. import android.view.View.OnClickListener;
  11. import android.widget.Button;
  12. import android.widget.LinearLayout;
  13. /**
  14. * 布局中嵌入Activity例子
  15. * @author administrator
  16. *
  17. */
  18. public class ActivityInLayoutDemoActivity extends ActivityGroup {
  19. private LinearLayout container;
  20. private Button click1;
  21. private Button click2;
  22. /**
  23. * 子View管理
  24. */
  25. private Map<String, View> childViews = new HashMap<String, View>();
  26. private String currentTag;
  27. @Override
  28. public void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.main);
  31. container = (LinearLayout) findViewById(R.id.container);
  32. click1 = (Button) findViewById(R.id.click1);
  33. click2 = (Button) findViewById(R.id.click2);
  34. click1.setOnClickListener(new OnClickListener() {
  35. @Override
  36. public void onClick(View arg0) {
  37. startActivity("activity1", new Intent(ActivityInLayoutDemoActivity.this, Activity1.class));
  38. }
  39. });
  40. click2.setOnClickListener(new OnClickListener() {
  41. @Override
  42. public void onClick(View arg0) {
  43. startActivity("activity2", new Intent(ActivityInLayoutDemoActivity.this, Activity2.class));
  44. }
  45. });
  46. }
  47. /**
  48. * 加載子Activity
  49. *
  50. * @param tag
  51. * @param intent
  52. */
  53. private void startActivity(String tag, Intent intent) {
  54. if (currentTag != null) {
  55. View currentView = childViews.get(currentTag);
  56. if (currentView != null)
  57. currentView.setVisibility(View.GONE);
  58. }
  59. currentTag = tag;
  60. View originView = childViews.get(tag);
  61. final Window window = getLocalActivityManager().startActivity(tag,
  62. intent);
  63. final View decorView = window.getDecorView();
  64. if (decorView != originView && originView != null) {
  65. if (originView.getParent() != null)
  66. ((ViewGroup) originView.getParent()).removeView(originView);
  67. }
  68. childViews.put(tag, decorView);
  69. if (decorView != null) {
  70. decorView.setVisibility(View.VISIBLE);
  71. decorView.setFocusableInTouchMode(true);
  72. ((ViewGroup) decorView)
  73. .setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
  74. if (decorView.getParent() == null) {
  75. container.addView(decorView,
  76. new LinearLayout.LayoutParams(
  77. ViewGroup.LayoutParams.FILL_PARENT,
  78. ViewGroup.LayoutParams.FILL_PARENT));
  79. }
  80. decorView.requestFocus();
  81. }
  82. }
  83. }

2.效果圖

Copyright © Linux教程網 All Rights Reserved