Android开发:利用Activity的Dialog风格完成弹出框设计

转:http://www.linuxidc.com/Linux/2011-08/41933.htm

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

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

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

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:id="@+id/showString"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="在这里显示dialog里输入的数字:"  
  12.     />  
  13.   <Button   
  14.     android:id="@+id/openButton"  
  15.     android:text="点此打开Dialog"  
  16.     android:layout_width="fill_parent"  
  17.     android:layout_height="wrap_content"  
  18.   />    
  19. </LinearLayout>  
再创建一个textdialog.xml, 内容如下
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:orientation="vertical"  
  5.   android:layout_width="match_parent"  
  6.   android:layout_height="match_parent">  
  7. <EditText   
  8.     android:id="@+id/et"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content"  
  11.     />     
  12. <Button   
  13.     android:id="@+id/returnButton"  
  14.     android:text="请输入字符"  
  15.     android:layout_width="fill_parent"  
  16.     android:layout_height="wrap_content"  
  17.     />      
  18. </LinearLayout>  


  1. 现在在MainActivity里写下如下代码,都是很基本的代码,相信大家都能看懂public class MainActivity extends Activity {  
  2.       
  3.     private Button openButton;  
  4.     private TextView showString;  
  5.       
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         openButton = (Button)findViewById(R.id.openButton);  
  11.         showString = (TextView)findViewById(R.id.showString);  
  12.           
  13.         openButton.setOnClickListener(new OnClickListener() {  
  14.               
  15.         public void onClick(View v) {  
  16.                 //这里用到了返回试Activity的基本用法,因为和主题无关,就不多解释了  
  17.                 Intent i = new Intent(MainActivity.this, testDialog.class);  
  18.                 startActivityForResult(i, 0);  
  19.             }  
  20.         });  
  21.           
  22.     }  
  23.       
  24.     //利用返回试Activity接收输入的数据并显示,证明我们的Dialog式的Activity确实可以完成数据的处理  
  25.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  26.         super.onActivityResult(requestCode, resultCode, data);  
  27.         //取出字符串  
  28.         Bundle bundle = data.getExtras();  
  29.         String str = bundle.getString("str");  
  30.         showString.setText(str);  
  31.     }  
  32. }  
下面是testDialog的编程,你可以看出这个Dialog和正常的Activity就没什么区别,但它最后 确实可以像Dialog一样弹出
  1. ublic class testDialog extends Activity{  
  2.       
  3.     private Button returnButton;  
  4.     private EditText inputEditor;  
  5.       
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.textdialog);  
  9.           
  10.         returnButton = (Button)findViewById(R.id.returnButton);  
  11.         inputEditor = (EditText)findViewById(R.id.et);  
  12.           
  13.         //和前面一样,只是用到了返回式Activity的基本方法,虽然这里已经是个Dialog了,但却和普通Activity无异   
  14.         returnButton.setOnClickListener(new OnClickListener() {  
  15.             public void onClick(View v) {  
  16.                 String input = inputEditor.getText().toString();  
  17.                 Intent i = new Intent(testDialog.this, MainActivity.class);  
  18.                 Bundle b = new Bundle();  
  19.                 b.putString("str", input);  
  20.                 i.putExtras(b);  
  21.                 testDialog.this.setResult(RESULT_OK, i);  
  22.                 testDialog.this.finish();  
  23.             }  
  24.         });  
  25.     }  
  26. }  
最后的亮点,设置Activity的Dialog风格,在 MainActivity里注册下第二个Activity吧,别完了风格设置哦
  1. <activity android:name=".testDialog"  
  2.               android:label="这是一个Activity变成的Dialog"  
  3.               android:theme="@android:style/Theme.Dialog"  
  4.         ></activity>  

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中实现定时任务的3种方法!

今天我们不用任何框架&#xff0c;用最朴素的 Java API 来实现定时任务&#xff0c;本文会介绍 3 种实现方案&#xff0c;我们一起来看...1、 sleep 这也是我们最常用的 sleep 休眠大法&#xff0c;不只是当作休眠用&#xff0c;我们还可以利用它很轻松的能实现一个简单的定时任…

回文子序列_计算回文子序列的总数

回文子序列Problem statement: 问题陈述&#xff1a; Given a string str, find total number of possible palindromic sub-sequences. A sub-sequence does not need to be consecutive, but for any xixj i<j must be valid in the parent string too. Like "icl&q…

Zookeeper 的 5 大核心知识点!

1 ZooKeeper简介ZooKeeper 是一个开源的分布式协调框架&#xff0c;它的定位是为分布式应用提供一致性服务&#xff0c;是整个大数据体系的管理员。ZooKeeper 会封装好复杂易出错的关键服务&#xff0c;将高效、稳定、易用的服务提供给用户使用。如果上面的官方言语你不太理解&…

【视频版】最新版Swagger 3升级指南和新功能体验!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Swagger 3.0 发布已经有一段时间了&#xff0c;它于 2020.7 月 发布&#xff0c;但目前市面上使用的主流版本还是 Swagger 2…

各大厂面试高频的面试题新鲜出炉,你能答上几道?

关于生产环境如何配置线程数&#xff0c;还是要根据业务来进行区分&#xff0c;我们时常会听到什么IO密集型、CPU密集型任务...那么这里提一个问题&#xff1a;大家知道什么样的任务或者代码会被认定为IO/CPU密集&#xff1f;又是用什么样的标准来认定IO/CPU密集&#xff1f;如…

c/c++如何获取数组的长度

2019独角兽企业重金招聘Python工程师标准>>> C、C中没有提供 直接获取数组长度的函数&#xff0c;对于存放字符串的字符数组提供了一个strlen函数获取长度&#xff0c;那么对于其他类型的数组如何获取他们的长度呢&#xff1f;其中一种方法是使 用sizeof(array) / s…

【送给读者】全新苹果 AirPods,包邮送一套!

为回馈长期以来科创人读者对本栏目的关注支持&#xff0c;本周小编联合了计算机领域八位高质量原创号主一起为大家送出一套 全新苹果AirPods 2代。以下推荐的公号原创率都很高&#xff0c;均为个人IP号&#xff0c;有些小伙伴应该已经关注部分公号。本次抽奖采用第三方抽奖小程…

进程控制(kill)

为什么80%的码农都做不了架构师&#xff1f;>>> kill&#xff1a;终止进程&#xff08;或传送信号到某进程&#xff09; kill [options] [process_ids] kill命令可以发送信号给进程&#xff0c;可以终止&#xff08;terminate&#xff09;&#xff08;默认操作&a…

Swagger增强神器:Knife4j!用它轻松实现接口搜索、Word下载、接口过滤...

视频版内容&#xff1a;Swagger 是开发中最常用的框架之一了&#xff0c;但 Swagger 本身又有很多不完善的地方&#xff0c;比如&#xff0c;在众多的接口中查询某一个接口&#xff0c;又或者是把所有的接口导出成 Word 格式等&#xff0c;都无法在 Swagger 中实现。有人可能会…

7种可能会导致内存泄漏的场景!

虽然Java程序员不用像C/C程序员那样时刻关注内存的使用情况&#xff0c;JVM会帮我们处理好这些&#xff0c;但并不是说有了GC就可以高枕无忧&#xff0c;内存泄露相关的问题一般在测试的时候很难发现&#xff0c;一旦上线流量起来可能马上就是一个诡异的线上故障。1. 内存泄露的…

logstash 过虑nginx访问日志

标题是不是可以翻译成这样&#xff1a;logstash Filters nginx access log好了&#xff0c;进入正题&#xff0c;日志管理服务器我用ElasticSearchLogStashKibanaRedis先说下我的架构&#xff1a;远程NGINX采集日志数据到REDISlogstashelasticsearchkibana服务器至于怎么部署&a…

Spring中的重试功能!嗯,有点东西

来源&#xff1a;https://albenw.github.io/posts/69a9647f/概要Spring实现了一套重试机制&#xff0c;功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能&#xff0c;已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。 本…

关于Shell的一些常用命令

2019独角兽企业重金招聘Python工程师标准>>> ls -lat 列出当前目录所有东东的东东 ls -lath 人看的大小 ls -F | grep "/$"只搞目录 ls -lR 包括子目录… ls --ignore filename -lt 忽略某个 which&#xff0c;在PATH变量指定的路径中&#xff0c;搜索看某…

用Netty撸一个心跳机制和断线重连!

来源&#xff1a;www.jianshu.com/p/1a28e48edd92心跳机制何为心跳所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注&#xff1a;心跳包还有另一个作用&#xff0c;经常被忽略&#xff0c;即&…

ThreadLocal线程范围内的共享变量

模拟ThreadLocal类实现&#xff1a;线程范围内的共享变量&#xff0c;每个线程只能访问他自己的&#xff0c;不能访问别的线程。 package com.ljq.test.thread;import java.util.HashMap; import java.util.Map; import java.util.Random;/*** 线程范围内的共享变量* * 三个模块…

Java中操作Excel的3种方法,太好用了!

一、介绍在平时的业务系统开发中&#xff0c;少不了需要用到导出、导入excel功能&#xff0c;今天我们就一起来总结一下&#xff0c;如果你正为此需求感到困惑&#xff0c;那么阅读完本文&#xff0c;你一定会有所收获&#xff01;二、poi大概在很久很久以前&#xff0c;微软的…

代理服务器Tengine的研究与测试

代理服务器Tengine的研究与测试一、Tengine介绍1.首先要知道什么Nginx1)Nginx&#xff08;发音同 engine x&#xff09;是一款轻量级的Web 服务器&#xff0f;反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;并在一个BSD-like 协议下发行。由…

不错!SpringBoot发布Jar包优化瘦身指南!

概要说明随着Spring Boot的流行&#xff0c;大家体验到只需构建输出一个jar文件&#xff0c;然后只需一个java -jar命令就能部署运行应用的爽快。常见一些单体应用随着项目规模的扩展单个jar文件的大小越来越大&#xff0c;动辄两三百MB。如果再引入微服务架构&#xff0c;动辄…

CountDownLatch:别浪,等人齐再团!

一入王者深似海&#xff0c;从此对象是路人。哈喽观众老爷们大家好&#xff0c;我是战神吕布字奉先&#xff0c;今天给大家来一部吕布的教学视频&#xff01;咳咳&#xff0c;不对。大家好&#xff0c;我是磊哥&#xff0c;今天给大家来一篇 CountDownLatch 的文章。在开始之前…

附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!

2011年12月21日&#xff0c;有人在网络上公开了一个包含600万个CSDN用户资料的数据库&#xff0c;数据全部为明文储存&#xff0c;包含用户名、密码以及注册邮箱。事件发生后CSDN在微博、官方网站等渠道发出了声明&#xff0c;解释说此数据库系2009年备份所用&#xff0c;因不明…