在我们使用Dialog时,如果需要用到很多自己设计的控件,虽然可以让弹出框显示出我们需要的界面,但却无法找到地方完成控制代码的编写,如何解决这个问题呢,我们可以将Activity伪装成Dialog弹出框,这样即显示了界面,在Activity里写控制代码也是大家的拿手好戏了,现在我就来抛砖引玉说说简单的实现吧。

首先,问题的关键在MainActivity里的一句 android:theme="@android:style/Theme.Dialog",这就是Activity的Dialog风格。

我们先创建一个main.xml,内容如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/showString"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="在这里显示dialog里输入的数字:"
/>
<Button
android:id="@+id/openButton"
android:text="点此打开Dialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

再创建一个textdialog.xml,内容如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/returnButton"
android:text="请输入字符"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
现在在MainActivity里写下如下代码,都是很基本的代码,相信大家都能看懂
public class MainActivity extends Activity { private Button openButton;
private TextView showString; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); openButton = (Button)findViewById(R.id.openButton);
showString = (TextView)findViewById(R.id.showString); openButton.setOnClickListener(new OnClickListener() { public void onClick(View v) {
//这里用到了返回试Activity的基本用法,因为和主题无关,就不多解释了
Intent i = new Intent(MainActivity.this, testDialog.class);
startActivityForResult(i, );
}
}); } //利用返回试Activity接收输入的数据并显示,证明我们的Dialog式的Activity确实可以完成数据的处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//取出字符串
Bundle bundle = data.getExtras();
String str = bundle.getString("str");
showString.setText(str);
}
}

下面是testDialog的编程,你可以看出这个Dialog和正常的Activity就没什么区别,但它最后确实可以像Dialog一样弹出

ublic class testDialog extends Activity{  

    private Button returnButton;
private EditText inputEditor; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textdialog); returnButton = (Button)findViewById(R.id.returnButton);
inputEditor = (EditText)findViewById(R.id.et); //和前面一样,只是用到了返回式Activity的基本方法,虽然这里已经是个Dialog了,但却和普通Activity无异
returnButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String input = inputEditor.getText().toString();
Intent i = new Intent(testDialog.this, MainActivity.class);
Bundle b = new Bundle();
b.putString("str", input);
i.putExtras(b);
testDialog.this.setResult(RESULT_OK, i);
testDialog.this.finish();
}
});
}
}

最后的亮点,设置Activity的Dialog风格,在MainActivity里注册下第二个Activity吧,别完了风格设置哦

<activity android:name=".testDialog"
android:label="这是一个Activity变成的Dialog"
android:theme="@android:style/Theme.Dialog"
></activity>

好了,你可以运行一下了,如果正常,你将看到和我一样的结果

Android 如何利用Activity的Dialog风格完成弹出框设计的更多相关文章

  1. Android开发利用shareSDK等第三方分享,弹出的是英文名称。例如Genymotion模拟器

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发利用shareSDK等第三方分享,弹出的是英文名称.例如Genymotion模拟器就 ...

  2. iOS风格的弹出框(alert,prompt,confirm)

    前两天,自己写了一个简单的插件,在移动端使用,不管是安卓手机还是iOS系统的手机,弹出框统一使用iOS风格的. 该弹出框是依赖于jQuery的,当然也可以将用jq写的几句代码转换为原生代码. 今天把代 ...

  3. easyui打开dialog后给弹出框内输入框赋值问题

    在写一个弹出页面的时候,里面有一些输入框,需要在弹出的时候从数据库取值并且赋值,刚开始在弹出的时候使用$(id).val(value),结果赋值失败,为空当时纠结了一会,然后突然想到在easyui打开 ...

  4. 仿照Android标准API写的各种形式的弹出框

    strings.xml: <?xml version="1.0" encoding="utf-8"?> <resources> < ...

  5. Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...

    PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框...   AndBase中AbActivity封 ...

  6. 全局获取 (Activity)Context,实现全局弹出 Dialog

    为什么需要一个全局的 (Activity)Context 需求1:在进入 app 的时候,要求做版本检测,有新的版本的时候,弹出一个 AlertDialog,提示用户版本更新 需求2:从别的设备挤下来 ...

  7. android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动

    android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动            1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...

  8. android 三种弹出框之一PopupWindow

    PopupWindow 在android的弹出框我目前了解到的是有三种:AlertDialog,PopupWindow,Activity伪弹框, AlertDialog太熟悉了,这里就不介绍了 就先看 ...

  9. 【Android】各式各样的弹出框与对菜单键、返回键的监听

    Android自带各式各样的弹出框.弹出框也是安卓主要的组件之中的一个.同一时候安卓程序能够对菜单键.返回键的监听.但在安卓4.0之后就禁止对Home键的屏蔽与监听,强制保留为系统守护按键.假设非要对 ...

随机推荐

  1. Azure REST API (5) 中国Azure EA Portal Billing API

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. EA Portal的管理url是:https://ea.azure ...

  2. CentOS7.0安装Ceph(jewel)及以上版本

    背景 由于docker的Ceph插件rexray对Ceph版本有一定的要求,当Ceph版本为hammer (0.94.10)时,rexray无法成功创建rbd设备.CentOS 7及以上版本,默认安装 ...

  3. AngularJS系统学习之Module(模块)

    本文源自:http://blog.csdn.net/woxueliuyun/article/details/50962645 学习之后略有所得, 来此分享.建议看原文. 模块是提供一些特殊服务的功能块 ...

  4. java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误

    一般是jar包冲突,或者某些jar包版本不同. 如上,spring其他包的版本均为4.2.5,而spring-webmvc的jar包为1.2.6版本,造成版本冲突. 把该包版本改为4.2.5,宣告成功 ...

  5. Hadoop2 使用 YARN 运行 MapReduce 的过程源码分析

    Hadoop 使用 YARN 运行 MapReduce 的过程如下图所示: 总共分为11步. 这里以 WordCount 为例, 我们在客户端终端提交作业: # 把本地的 /home/hadoop/t ...

  6. CodeForces - 357C Knight Tournament 伪并查集(区间合并)

    Knight Tournament Hooray! Berl II, the king of Berland is making a knight tournament. The king has a ...

  7. python-re使用举例

    代码: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." print(tex ...

  8. 洛谷 - P2158 - 仪仗队 - 欧拉函数

    https://www.luogu.org/problemnew/show/P2158 好像以前有个妹子收割铲也是欧拉函数. 因为格点直线上的点,dx与dy的gcd相同,画个图就觉得是欧拉函数.但是要 ...

  9. iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

    cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...

  10. opencv3.1 压缩并拼图

    必须有重叠才能拼,压缩越多,拼接越快 #include <opencv2\opencv.hpp> #include <opencv2\stitching.hpp> using ...