关于Activity的少许细节
1. 对活动应用样式和主题
2. 隐藏活动标题
3. 显示对话框窗口
4. 显示进度对话框
1. 应用样式和主题

改成
android:theme="@android:style/Theme.Dialog"
效果如下:

2. 隐藏活动的标题
比方说手机QQ登陆的时候,就会有一个全屏的QQ画面;说着微博也是,有一个全屏广告
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题
setContentView(R.layout.activity_main);
Log.i(Tag, "onCreat()");
}
标题没有了:(我应该在这里放一幅画)

3.显示对话框窗口
(主要思想:重写Activity类中的onCreateDialog()方法)
(这里还谈到了“回调方法”目前先放一放)
现在布局文件里面加入一个button,然后在activity中绑定事件,然后在onClick()中填入代码
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示对话框" />
MainActivity.java中的代码是:(事件监听我知道,回调不太清楚,但是showDialog()方法被调用的时候,onCreateDialog()方法被调用了)
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
CharSequence[] items = {"你","我","他"};
boolean[] checkedItems = new boolean[items.length];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
showDialog(0); //坑爹啊,这方法过时了?
}
@Override
@Deprecated
protected Dialog onCreateDialog(int id)
{
//下面填代码
switch (id)
{
case 0:
return new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher)
.setTitle("这是个简单的对话框..")
.setPositiveButton("OK",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getBaseContext(),
"OK被点击了", Toast.LENGTH_LONG).show();
//Toast是一种提示框,Toast.LENGTH_LONG表示它显示时间长
}
})
.setNegativeButton("Cancel",new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getBaseContext(),
"Cancel被点击了", Toast.LENGTH_LONG).show();
//Toast是一种提示框,Toast.LENGTH_LONG表示它显示时间长
}
})
.setMultiChoiceItems(items,
checkedItems,
new DialogInterface.OnMultiChoiceClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which,
boolean isChecked)
{
Toast.makeText(getBaseContext(),
items[which]+(isChecked?"Checked!":"unCkecked!"),
Toast.LENGTH_LONG).show();
}
})
.create();
case 1: break;
default:
break;
}
return null;
}
}





大概玩明白咋回事儿了。
showDialog()一旦被执行,它就去调用onCreateDialog()这个由Activity管理的方法。------回调
补充:
Toast android.widget.Toast.makeText(Context context, CharSequence text, int duration)
Make a standard toast that just contains a text view.
- Parameters:
- context The context to use. Usually your
android.app.Applicationorandroid.app.Activityobject.- text The text to show. Can be formatted text.
- duration How long to display the message. Either
LENGTH_SHORTorLENGTH_LONG - text The text to show. Can be formatted text.
实际上,再看上面的代码,
setPositiveButton(String text,new DialogInterface.OnClickListener(){}) 这方法设置了一个OK按钮
setNegativeButton(String text,new DialogInterface.OnClickListener(){}) 这方法设置了一个Cancel按钮
setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,new DialogInterface.OnMultiChoiceClickListener()) 设置了一个复选框列表
而且代码一开始的
new AlertDialog.Builder(this)
实际上返回 Builder对象,完全可以写成:
Builder builder = new AlertDialog.Builder(this);
然后就是跟上面代码差不多:
builder.setPositiveButton();
builder.setNegativeButton();
….
switch代码块里面返回 builder.create()就好了
程序中多次用到Context类以及其引用,实际上,Activity是Context的子类
如果在activity中引用context对象,那么可以在外部成员变量的地方声明一个 :
private Context context = this;
之后就不用总是getBaseContext(); 而直接用context就好了。
但是上面的Toast.makeText(getBaseContext(),”ok clicked”,Toast.LENGTH_LONG)由于toast在AlertDialog中使用,所以还是应该用getBaseContext()
4. 显示进度对话框
基本上就是尝试着用代码开一个线程去做后台的事儿---假装我们在做什么,前台呢?显示模态进度条对话框,由于是模态(操作系统术语)所以阻塞了用户界面。
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
final ProgressDialog dialog = ProgressDialog.show(this,"我们在处理中", "拼命加载中",true);
new Thread(new Runnable()
{
@Override
public void run()
{
// try
// {
// Thread.sleep(5000); //假装我们在做什么
// //好,我们已经做完了,等够5秒了
// dialog.dismiss();
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
SystemClock.sleep(5000);//假装我们在做什么,这样写不用try catch
dialog.dismiss();
}
}).start();
}
}


然后5秒,这进度条就不见了.
dialog.dismiss()了
既然要假装做点儿什么,来做点儿实际的:
修改MainActivity .java
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
showDialog(0);
progressDialog.setProgress(0);
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 15; i++)
{
SystemClock.sleep(5000);
int temp = (int)(100/15);
progressDialog.incrementProgressBy(temp);//更新进度条
}
progressDialog.dismiss();
}
}).start();
}
@Override
@Deprecated
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case 0:
progressDialog = new ProgressDialog(this);
//return
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle((CharSequence)"正在拼命加载中...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE,"ok",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getBaseContext(), "ok clicked", Toast.LENGTH_LONG).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE,"cancel",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getBaseContext(), "cancel clicked", Toast.LENGTH_LONG).show();
}
});
return progressDialog;
default:
break;
}
return null;
}
}

在activity中显示dialog,这里一样用的showDialog(),然后重写onCreateDialog() 方法
onCreateDialog()里面显示一个进度条对话框,然后新线程就负责动态更新它。
progressDialog.dismiss()方法关闭该对话框。
关于Activity的少许细节的更多相关文章
- Android之Activity跳转
简述 如果把每个activity看成一个页面的话,那么activity之间的跳转和页面的之间的跳转基本上是一样的.首先需要监听一个事件,当这个事件发生的时候,就进行跳转.html中有个<a sr ...
- activity状态的保存和保持(onRetainNonConfigurationInstance和getLastNonConfigurationInstanc
本文转载于:http://chengbs.iteye.com/blog/1156167 比较onsaveinstancestate() 与 onretainnonconfigurationinstan ...
- Android-Application
1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对 ...
- Android使用Application总结
对于application的使用,一般是 在Android源码中对他的描述是; * Base class for those who need to maintain global applicati ...
- Android Application对象必须掌握的七点
1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 ap ...
- 【Android进阶】Application对象的详解
1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对 ...
- 深入理解Intent和IntentFiler(一)
http://blog.csdn.net/u012637501/article/details/41080891 为了比较深刻的理解并灵活使用Intent,我计划将这部分的学习分为两步:一是深入理解I ...
- Android笔记一.深入理解Intent和IntentFilters(一)
深入理解Intent和IntentFiler(一) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 为了比較深刻的理解并灵活使用Inten ...
- android Application类的详细介绍(转)
在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base cl ...
随机推荐
- JavaScript获取DOM元素位置和尺寸大小
在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScri ...
- Control Flow ->> Containers
Sequence Container: 它的作用就是可以把一组任务绑定起来成为一个整体,这样Sequence本身就是具有了任务(task)的特性,比如TransactionOption.如果需要把一组 ...
- 《大道至简-Team》
已经学习了<大道至简>两章,我们了解了编程的本质和“懒人”造就了方法.书中没有提供给我们编程的技巧,捷径,而是从别的方面为我们讲解了编程的精义.第三章就为我们引入了“团队”这个概念. 我们 ...
- 了解thinkphp(二)
ThinkPHP的核心文件: Library文件夹下的Think文件夹目录 ThinkPHP的入口文件是: ThinkPHP.php , 我们在创建项目时都要引入这个入口文件!!! 一 , 项目的部署 ...
- HTML 空格的表示符号 nbsp / ensp / emsp 的区别?
半角的不断行的空白格(推荐使用) 半角的空格 全角的空格 半角的不断行的空白格(推荐使用) 半角的空格 全角的空格
- Java NIO读书笔记2
一.选择器(Selector) Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel ...
- 使用Jenkins构建持续集成环境
简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...
- 转: sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
[sql] view plain copy print?在CODE上查看代码片派生到我的代码片 --修改字段类型: --alter table 表名 alter column 待修改字段名 待修改字段 ...
- HDU 2610 (自己完全找不到思路) Sequence one
搜索虐我千百遍,我待搜索...好吧,我还木有初恋 题意: 我开始理解题意就理解偏了,Orz 题中有n个元素构成的序列,求出前p个非递减子序列.子序列是先按长度排序的,然后按原序列先后位置排序的. 这里 ...
- volley(3) 参数{or_barcode:or_barcode,or_remai:or_remain, bar_remain:bar_remain} method:POST
1. 来自于WHCombineBatchFragment.java/** * 分拆按钮点击事件,获取数据,同时获取popupWindow的数据 */private void breakingBtnCl ...