Android中,最常的对话框估计就是AlertDialog.Builder了,下面学习一下怎么给它加一些特殊动画效果。
/**
* 弹出退出对话框
*/
private void showExitDialog() {
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setTitle("退出");
builder.setMessage("确定要退出吗?");
builder.setNegativeButton("取消", null);
builder.setNeutralButton("支持", null);
builder.setPositiveButton("退出", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 停止服务
stopService(new Intent(MainActivity.this, MainService.class));
// 结束当前窗体
MainActivity.this.finish();
}
});
<strong><span style="color:#ff0000;">AlertDialog dialog = builder.create();
</span></strong> dialog.show();
Window window = dialog.getWindow();
window.setWindowAnimations(R.style.<strong><span style="color:#33cc00;">dialog_anim</span></strong>);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
showExitDialog();
}
return true;
}
当用户在按下手机上的返回键是,就会弹出该对话框。该对话框会根据自己所设计的方法弹出来,我设置的是进入时从下往上显示在屏幕中,退出时从屏幕中向下退出。
来看看style文件中的配置:
<style name="dialog_anim" parent="@android:style/Animation">
<item name="android:windowEnterAnimation">@anim/dialog_appear</item>
<item name="android:windowExitAnimation">@anim/dialog_disappear</item>
</style>
其中,anim文件夹下有dialog_appear和dialog_disappear两个资源文件
res/anim/dialog_appear.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="100.0%p" />
<alpha
android:duration="500"
android:fromAlpha="0.5"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
res/anim/dialog_disappear.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:toYDelta="100.0%p" />
<alpha
android:duration="500"
android:fromAlpha="0.5"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
如此,在点击返回按键时,即可看到一个对话框从下往上的显示在屏幕上了
另外,给AlertDialog设置View,当用户点击view中的按键时,同时结束该对话框。
/**
* 显示搜索对话框
*/
private void showDialogBySearch() {
<span style="color:#ff0000;">final AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.show();
</span> Window window = dialog.getWindow();
window.setWindowAnimations(R.style.dialog_anim);
window.setContentView(<span style="BACKGROUND-COLOR: #33ff33">R.layout.search_dialog</span>);
final RadioGroup rg = (RadioGroup) <span style="BACKGROUND-COLOR: #99ff99">window.</span>findViewById(R.id.radioGroup1);
final EditText et_word = (EditText) window.findViewById(R.id.et_word);
Button btn_search = (Button) window.findViewById(R.id.btn_search);
btn_search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
search(rg, et_word);
<span style="color:#ff0000;">dialog.dismiss();
</span> }
public void search(final RadioGroup rg, final EditText et_word) {
List<Poem> list = null;
String word = et_word.getText().toString().trim();
int rbId = rg.getCheckedRadioButtonId();
switch (rbId) {
case R.id.radio0: // 标题
list = poemDAO.getGeneral("title", word);
break;
case R.id.radio1: // 诗歌
list = poemDAO.getGeneral("content", word);
break;
case R.id.radio2: // 注解
list = poemDAO.getGeneral("desc", word);
break;
}
MyAdapter adapter = new MyAdapter(MainActivity.this, list);
lv_catelog.setAdapter(adapter);
}
});
}
res/layout/search_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="#fff"
android:orientation="vertical" >
<RadioGroup
android:id="@id/radioGroup1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="12.0dip"
android:gravity="center"
android:orientation="horizontal" >
<RadioButton
android:id="@id/radio0"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:checked="true"
android:text="@string/str20149" />
<RadioButton
android:id="@id/radio1"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="@string/str20150" />
<RadioButton
android:id="@id/radio2"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="@string/str20151" />
</RadioGroup>
<EditText
android:id="@id/et_word"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="12.0dip"
android:ems="10"
android:hint="请输入查询关键字"
android:singleLine="true" >
<requestFocus />
</EditText>
<Button
android:id="@id/btn_search"
android:layout_width="140.0dip"
android:layout_height="wrap_content"
android:layout_marginBottom="12.0dip"
android:text="@string/str20152" />
</LinearLayout>
当点击自定义View内面的查询按钮后,对话框就会退出页面了。。。。。。