Android里一般的画面(Activity)都是尽量占满整个屏幕,这样符合单线程的设计,

而有些类似popup之类的子画面,却希望他弹出来的时候表现的如同web的模态窗口

(ModelWindow,Dialog等等),在项目中出现了一个可以把子画面做成类似模态窗口

的例子。

代码

MainActivity.java

  1. package com.example.testpopactivity;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. import android.widget.TextView;
  10.  
  11. public class MainActivity extends Activity implements OnClickListener {
  12.  
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17.  
  18. Button btnYes = (Button) findViewById(R.id.btnPopup);
  19. btnYes.setOnClickListener(this);
  20.  
  21. }
  22.  
  23. @Override
  24. public void onClick(View view) {
  25. switch (view.getId()) {
  26. case R.id.btnPopup:
  27. Intent intent = new Intent(MainActivity.this, PopupActivity.class);
  28. startActivityForResult(intent,R.layout.activity_popup);
  29. break;
  30. default:
  31. break;
  32. }
  33.  
  34. }
  35.  
  36. @Override
  37. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  38. switch (requestCode) {
  39. case R.layout.activity_popup:
  40. String input = (data == null? "" : data.getStringExtra("input"));
  41. if(!"".equals(input)) {
  42. TextView tvLabel = (TextView)findViewById(R.id.tvLabel);
  43. tvLabel.setText(input);
  44. }
  45. break;
  46. default:
  47. break;
  48. }
  49. }
  50.  
  51. }

PopupActivity.java

  1. package com.example.testpopactivity;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.EditText;
  9.  
  10. public class PopupActivity extends Activity implements OnClickListener {
  11.  
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_popup);
  16.  
  17. setFinishOnTouchOutside(false); // to set this could prevent window from closing by touching transparent part.
  18. findViewById(R.id.btnOk).setOnClickListener(this);
  19.  
  20. }
  21.  
  22. @Override
  23. public void onClick(View view) {
  24. Intent intent = new Intent();
  25. switch (view.getId()) {
  26. case R.id.btnOk:
  27. String input = ((EditText) findViewById(R.id.etInput)).getText().toString();
  28. intent.putExtra("input", input);
  29. setResult(RESULT_OK, intent);
  30. finish();
  31. break;
  32. default:
  33. break;
  34. }
  35. }
  36.  
  37. }

activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:gravity="center"
  6. tools:context=".MainActivity" >
  7.  
  8. <TextView
  9. android:id="@+id/tvLabel"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:text="@string/hello_world" />
  13.  
  14. <Button
  15. android:id="@+id/btnPopup"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_below="@id/tvLabel"
  19. android:text="@string/btn_popup" />
  20.  
  21. </RelativeLayout>

activity_popup.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="200dp"
  4. android:layout_height="100dp"
  5. android:gravity="center"
  6. tools:context=".PopupActivity" >
  7.  
  8. <EditText
  9. android:id="@+id/etInput"
  10. android:layout_width="100dp"
  11. android:layout_height="wrap_content"
  12. android:inputType="text"
  13. android:text="@string/str_blank" />
  14.  
  15. <Button
  16. android:id="@+id/btnOk"
  17. android:layout_width="100dp"
  18. android:layout_height="wrap_content"
  19. android:layout_below="@id/etInput"
  20. android:text="@string/btn_ok" />
  21.  
  22. </RelativeLayout>

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.testpopactivity"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="14"
  9. android:targetSdkVersion="14" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="com.example.testpopactivity.MainActivity"
  18. android:label="@string/app_name" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21.  
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. <activity
  26. android:name="com.example.testpopactivity.PopupActivity"
  27. android:label="@string/title_activity_popup"
  28. android:theme="@android:style/Theme.Dialog"
  29. >
  30. </activity>
  31. </application>
  32.  
  33. </manifest>

效果如图:

Android 中类似ModelWindow的一个实现的更多相关文章

  1. Android中关于XML的一个小问题——使用XML输出“<”错误的问题

    在 XML 中,有 5 个预定义的实体引用: < < 小于 > > 大于 & & 和号 &apos; ' 单引号 " " 引号 注释 ...

  2. Android中使用shape制作一个旋转的progressbar

    public class ZNtestResActivity extends Activity { @Override public void onCreate(Bundle savedInstanc ...

  3. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  4. [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法

    本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...

  5. android中的一些问题

    1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚 ...

  6. Android中的Surface和SurfaceView

    一.什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上(后面有原因解释).传统的view共享一 ...

  7. android中SELINUX规则分析和语法简介【转】

    本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...

  8. android中SELINUX规则分析和语法简介

    1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...

  9. CocosCreator反射在Android中的使用

    CocosCreator反射在Android中的使用 新建一个CocosCreator项目,然后点击构建 构建完成之后,即可用AndroidStudio打开构建的项目 使用AndroidStudio打 ...

随机推荐

  1. 3.2 Git 分支 - 分支的新建与合并

    分支的新建与合并 现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 假设此时,你突然接到一个 ...

  2. (DFS)hdoj1241-Oil Deposit

    #include<cstdio> ][]; ][]={{,},{,-},{,},{-,},{,},{,-},{-,},{-,-}},cnt; void dfs(int x,int y) { ...

  3. scikit-learn 机器学习工具包

    scikit-learn官网:http://scikit-learn.org/stable/ scikit-learn初始化学习:  http://scikit-learn.org/stable/in ...

  4. Hibernate中的继承映射

    1.继承映射 继承映射分为两种情况:简单继承映射和继承映射. 在简单继承映射中,每个子类都要写一个映射文件. 在继承映射中,只使用一个映射文件.继承映射分为三种情况: 所有子类映射到一张表 需要使用鉴 ...

  5. .net 小技巧

    简单提示效果: <input runat="server" type="text" id="SelPerson" value=&quo ...

  6. Helloworld程序的创建以及配置文件的讲解

    创建项目. create Project 选择创建的Project类别以及使用的SDK,可能SDK需要配置或者修改配置. 这个页面是问你是否使用模板创建. Command Line App 会自动创建 ...

  7. 移动设备和SharePoint 2013 - 第5部分:自定义应用

    博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...

  8. SharePoint 2010 BCS - 概述

    博客地址 http://blog.csdn.net/foxdave SharePoint 2010首次引入了BCS的概念 - Business Connectivity Service,即业务连接服务 ...

  9. 一篇很好介绍stringBuffer和StringBuilder的区别--来自百度

    ava.lang.StringBuffer线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的 ...

  10. self进行weak化

    创建block匿名函数之前一般需要对self进行weak化,否则造成循环引用无法释放controller: __weak MyController *weakSelf = self 或者 __weak ...