以前学过了对话框,但是不知道做什么用,怎么用才合适。最近做东西的时候发现,这一块的学问还挺大的。想想,如果让我们开发桌面Widget应用的时候,需要用到对话框的风格该怎么办?常规的在Activity里创建对话框的方式肯定是不行的了,此时我们应该想到对话框风格的窗体,就是这篇文章我要讲的。
这种对话框本质上仍是一个窗体,只是把显示的窗口的Activity的风格换成了对话框的风格即可。
下面用一个提示用户是否升级的对话框来说明:
先看一哈效果:
这个窗口其实就是桌面上显示的。
下面看一哈代码:
public class Upgrade extends Activity{
static final String Tag="DropEggUpgrade";
private Context mContext;
private Dialog mUpgradeDialog;
public void setContext(Context context){
mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContext(this);
showDialog();
}
//可以重载,此处是自己写的方法
public void showDialog(){
//GameLog.log(Tag, "showDialog");
mUpgradeDialog = createDialog();
mUpgradeDialog.show();
}
private Dialog createDialog(){
//GameLog.log(Tag, "createDialog");
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setIcon(mContext.getResources().getDrawable(R.drawable.app_icon));
builder.setTitle("升级");
builder.setMessage("恭喜你,通关了!后续游戏更精彩,是否需要升级?");
builder.setPositiveButton("升级", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do upgrade work
Toast.makeText(mContext, "后台升级中...", Toast.LENGTH_LONG).show();
dialog.cancel();
Upgrade.this.finish();
}
});
builder.setNegativeButton("暂不升级", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(mContext, "您已取消升级", Toast.LENGTH_LONG).show();
dialog.cancel();
Upgrade.this.finish();
}
});
return builder.create();
}
}
最重要的是要在Manifest.xml中加入风格:
<activity android:name="com.tencent.upgrade.DropEggUpgrade"
android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.tencent.dropegg.upgrade"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
到此,一个窗体对话框就开发完了。