在我们使用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. 关于group_concat函数拼接字符超长的问题

    昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...

  2. AngularJS系统学习之Scope(作用域)

    本文出自:https://www.w3ctech.com/topic/1611 看完了没怎么懂,  也许是和别人 原文作者: Nicolas Bhttps://www.w3ctech.com/topi ...

  3. int和Integer及拆箱与装箱

    int和Integer 如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null.但是如果面试官再问一下In ...

  4. Java int与String互相转化大全

    int -> String //int 转化才 string int num = 123456; //方法一 会产生两个String对象 String s1 = num+"" ...

  5. eclipse修改某一个项目的字符编码

    eclipse修改某一个项目的字符编码   1 选中要修改编码的文件,鼠标右键,选择[Properties]  2 左侧选中[Resource], 右侧出现[Text file encoding], ...

  6. HTML5 中的meter 标签的样式设置

    meter { -webkit-appearance: none; position: relative; display: block; margin: 8px auto; width: 100px ...

  7. CodeForces754D【贪心】

    题意: 有n个区间,每个区间覆盖区间里一段数,求最大连续区间长度被覆盖k次,并输出选取的区间. 思路: 贪心: 感觉一开始肯定是要把区间按left从小到大排序的. 然后肯定是连续k个区间能够达到的重叠 ...

  8. 强大的在线web编辑器UEditor

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor在线演示地址:http://u ...

  9. jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)

    传送门 题面 题解 不难看出每个点的大小为行列限制中较小的那一个(因为数据保证有解) 对于行的每个限制,能取到的个数是列里限制大于等于它的数的个数,同理,对于列是行里大于它的个数(这里没有等于,为了避 ...

  10. 原生js回到顶部

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...