在我们使用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. JQ对象和原生DOM对象

    相同点:两者本质上都是DOM元素. 不同点:JQ对象是在原生DOM对象上进行了一次封装,使开发人员使用起来更简洁.高效. 两者之间用法也完全不同,很说初学者经常混淆. 其实区分两者并不难, 1.语法不 ...

  2. Nuget:Newtonsoft.Json

    ylbtech-Nuget:Newtonsoft.Json 1.返回顶部   2.返回顶部 1,Serialize JSON Product product = new Product(); prod ...

  3. docker学习 (三) Windows 10 安装Docker

    Docker CE: 社区版,免费. Docker EE: 企业版,收费. 安装:             Windows 10 Pro 64, 必须开启Hyper-v 下载:Docker for W ...

  4. 纯java config配置Spring MVC实例

    1.首先创建一个Maven工程,项目结构如下: pom.xml添加Spring和servlet依赖,配置如下 <project xmlns="http://maven.apache.o ...

  5. Fitnesse 访问日志配置

    1. 在build.xml中修改Finesse运行时的参数 <target name="run" depends="compile, compile-bootstr ...

  6. Node中的console控制台

    1. Node中的console类似于浏览器中的控制台console,它的作用在于帮助开发人员做API的辅助测试. 2. Node中的console主要功能:REPL 2.1 read 读取你输入的内 ...

  7. 文档通信(跨域-不跨域)、时时通信(websocket)、离线存储(applicationCache)、开启多线程(web worker)

    一.文档间的通信 postMessage对象 //不跨域 1.iframe:obj.contentWindow [iframe中的window对象] iframe拿到父级页面的window: pare ...

  8. C 语言实例 - 字符串排序

    C 语言实例 - 字符串排序 C 语言实例 C 语言实例 按字典顺序排序. 实例 #include<stdio.h> #include <string.h> int main( ...

  9. SQL必知必会03 计算字段 获取当前日期时间 日期时间格式化

  10. nutz 使用beetl

    src目录或src同级的其他目录(比如conf)下创建 beetl.properties文件,文件内容如下 (maven项目)在resources目录下创建 RESOURCE_LOADER=org.b ...