DialogFragment在android 3.0时被引入,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。今天来介绍如何使用DialogFragment来创建加载进度的旋转UI。
1》继承DialogFragment,重写onCreateView方法
/**
*
* @类说明 自定义LoadingFragment
*
* @author 逆生长
*
* @created 2015年7月17日
*/
@SuppressLint({ "NewApi", "ValidFragment" })
public class LoadingFragment extends DialogFragment {
private String mText;
private TextView tipTextView;
public LoadingFragment() {
}
public LoadingFragment(String text) {
this.mText = text;
}
@SuppressLint("NewApi")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getActivity());
View v = inflater.inflate(R.layout.progressdialog_no_deal, null);
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);
ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
tipTextView = (TextView) v.findViewById(R.id.tipTextView);//
//设置文字
tipTextView.setText(mText);
//设置旋转动画
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.anim);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
Dialog loadingDialog = new Dialog(getActivity(), R.style.customDialogTheme);
loadingDialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失
loadingDialog.setCancelable(true);// 设置点击返回键取消
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
return loadingDialog;
}
}
2》新建一个管理类 用来控制LoadingFragment的显示与隐藏
/**
*
* @类说明 dialog管理类 用来控制LoadingFragment的显示与隐藏
*
* @author 逆生长
*
* @created 2015年7月17日
*/
public class DialogManager {
private LoadingFragment loadingDialogFragment;
//用来控制是否显示dialog
private boolean isShowing = false;
public DialogManager(){
loadingDialogFragment = new LoadingFragment();
}
public void setText(String str){
loadingDialogFragment = new LoadingFragment(str);
}
/**
* 显示dialog
* @param fm
*/
@SuppressLint("NewApi")
public void showLoadingDialogFragment(FragmentManager fm){
if(!isShowing){
loadingDialogFragment.show(fm, "dialog");
isShowing = true;
}
}
/**
* 隐藏dialog
*/
@SuppressLint("NewApi")
public void hideLoadingDialogFragment(){
if(isShowing){
if(loadingDialogFragment.getActivity() != null){
loadingDialogFragment.dismissAllowingStateLoss();
}
isShowing = false;
}
}
}
最后 在MainActivity 显示
public class MainActivity extends Activity implements OnClickListener {
private DialogManager mDialogManager;
// 定义处理消息的对象
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
//隐藏dialog
mDialogManager.hideLoadingDialogFragment();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.show).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.show:
showDialog();
break;
}
}
private void showDialog(){
new Thread(new Runnable() {
@Override
public void run() {
try {
mDialogManager = new DialogManager();
mDialogManager.setText("加载中。。。");
mDialogManager
.showLoadingDialogFragment(getFragmentManager());
Thread.sleep(2000);// 睡2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(0);// 传送消息
}
}).start();
}
}
ok ! 代码写完,使用DialogFragment来创建加载进度UI介绍完毕!