Android 适应任何样式提示弹出框Dialog 封装
在Android开发中,难免有各种各样的提示框,如加载数据等待框,删除确认框、输入密码提示框等等,这些是完全可以自定义的,这里给出一个框架以及一个示例,帮助你开发任何样式布局的提示框,废话不多说,直接贴代码:
HintDialog.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.view.KeyEvent;
import android.view.Window;
public class HintDialog
{
Dialog mDialog = null;
private Context mContext = null;
private IHintDialog mIDialogInstance = null;
/**
* 构造函数
* @param context
*/
public HintDialog(Context context)
{
mContext = context;
mDialog = new AlertDialog(mContext)
{
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK &&
mIDialogInstance != null)
{
mIDialogInstance.onKeyDown(keyCode, event);
return true;
}
return super.onKeyDown(keyCode, event);
}
};
mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
}
/**
*
* @param iLayoutResId 此DIALOG采用的布局文件
* @param interfaceInstance 此DIALOG需要实现的一些接口事件 */
public void showDialog(int iLayoutResId, IHintDialog interfaceInstance)
{
if (mDialog == null || iLayoutResId == 0)
{
return;
}
mIDialogInstance = interfaceInstance;
mDialog.show();
mDialog.setContentView(iLayoutResId);
Window window = mDialog.getWindow();
if (mIDialogInstance != null)
{
mIDialogInstance.showWindowDetail(window);
}
}
/**
* 使dialog消失
*/
public void dismissDialog()
{
if (mDialog != null && mDialog.isShowing())
{
mDialog.dismiss();
}
}
/**
* 确定Dialog是否正在显示
* @return
public boolean isShowing()
{
if (mDialog != null && mDialog.isShowing())
{
return mDialog.isShowing();
}
return false;
}
public interface IHintDialog
{
public void onKeyDown(int keyCode, KeyEvent event);
public void showWindowDetail(Window window);
}
}
HintDialogActivity.java
import com.example.hintdialogdemo.HintDialog.IHintDialog;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class HintDialogActivity extends Activity implements OnClickListener
{
Button btnConfirm = null;
HintDialog mDialog = null;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(yout.activity_hint_dialog);
btnConfirm = (Button) findViewById(R.id.button1);
btnConfirm.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_hint_dialog, menu);
return true;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
mDialog = new HintDialog(
HintDialogActivity.this);
mDialog.showDialog(yout.confirm_dialog, new IHintDialog()
{
@Override
public void showWindowDetail(Window window)
{
TextView txvTitle = (TextView) window
.findViewById(R.id.txvTitle);
txvTitle.setText("Confirm?");
Button btnOK = (Button)
window.findViewById(R.id.btnOK);
btnOK.setText("Yes");
btnOK.setOnClickListener(HintDialogActivity.this);
Button btnCancel = (Button) window
.findViewById(R.id.btnCancel);
btnCancel.setText("NO");
btnCancel.setOnClickListener(HintDialogActivity.this);
}
@Override
public void onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"onKeyback now",
Toast.LENGTH_LONG).show();
}
}
});
break;
case R.id.btnOK:
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"Confirm OK now", Toast.LENGTH_LONG).show();
break;
case R.id.btnCancel:
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"Confirm Cancel now", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
其实也不难,主要是AlertDialog的使用,注意需要显示调用dissmissDialog()来消失此弹出框。