前一阵子在做伪装密码的功能,需要使用系统的对话框,对话框需要加长按事件等等。哈,直接上代码,我是比较喜欢直接看代码的。

1. 获取AlertDialog的Title

final int alertTitleId = getResources().getIdentifier( "alertTitle", "id", "android" );TextView title = (TextView)dlg.findViewById(alertTitleId);

2. 获取AlertDialog的Message

TextView message = (TextView)dlg.findViewById(android.R.id.message);

3. 获取AlertDialog的Button

Button btn = (Button)dlg.getButton(DialogInterface.BUTTON_POSITIVE);

4. 使用系统Holo风格

AlertDialog.Builder builder = DialogUtils.getAlertDialog(this, isLightDialog);public static AlertDialog.Builder getAlertDialog(Context context, boolean isLight) {return new AlertDialog.Builder(new ContextThemeWrapper(context, getDialogTheme(isLight)));}@TargetApi(Build.VERSION_CODES.HONEYCOMB)public static int getDialogTheme(boolean isLight) {return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? (isLight ? android.R.style.Theme_Holo_Light_Dialog: android.R.style.Theme_Holo_Dialog): android.R.style.Theme_Dialog;}

全部代码:

public class DialogUtils {/** * 生成符合系统主题的AlertDialog.Builder * @param context * @return */public static AlertDialog.Builder getAlertDialog(Context context, boolean isLight) {return new AlertDialog.Builder(new ContextThemeWrapper(context, getDialogTheme(isLight)));}@TargetApi(Build.VERSION_CODES.HONEYCOMB)public static int getDialogTheme(boolean isLight) {return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? (isLight ? android.R.style.Theme_Holo_Light_Dialog: android.R.style.Theme_Holo_Dialog): android.R.style.Theme_Dialog;}}

public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {initButtonView();}private void initButtonView() {findViewById(R.id.btn_show_dialog).setOnClickListener(this);findViewById(R.id.btn_show_dialog_listener).setOnClickListener(this);}private void showDialogView() {AlertDialog dlg = creatAlertDialog(true);dlg.show();setAlertDialog(dlg);}private void showDialogViewOnShowListener() {AlertDialog dlg = creatAlertDialog(false);dlg.setOnShowListener(new OnShowListener() {@Overridepublic void onShow(DialogInterface dialog) {setAlertDialog((AlertDialog)dialog);}});dlg.show();}private void setAlertDialog(AlertDialog dlg) {Typeface typeFace = Typeface.createFromAsset(getAssets(),"fonts/RobotoCondensed-Italic.ttf");setAlertDialogTitle(dlg, typeFace);setAlertDialogMessage(dlg, typeFace);setAlertDialogBtnView(dlg, typeFace);}private AlertDialog creatAlertDialog(boolean isLightDialog) {AlertDialog.Builder builder = DialogUtils.getAlertDialog(this, isLightDialog);builder.setTitle("Test Title");builder.setMessage("Test Message");// 这里设置点击事件null,再重新写点击事件,屏蔽点击之后对话框消失builder.setPositiveButton("Test Button", null);AlertDialog dlg = builder.create();return dlg;}@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)// android.R.color.holo_blue_darkprivate void setAlertDialogTitle(AlertDialog dlg, Typeface typeFace) {final int alertTitleId = getResources().getIdentifier( "alertTitle", "id", "android" );TextView title = (TextView)dlg.findViewById(alertTitleId);title.setTextColor(getResources().getColor(android.R.color.holo_blue_bright));if (null != typeFace) {title.setTypeface(typeFace);}}@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)// android.R.color.holo_blue_darkprivate void setAlertDialogMessage(AlertDialog dlg, Typeface typeFace) {TextView message = (TextView)dlg.findViewById(android.R.id.message);message.setTextColor(getResources().getColor(android.R.color.holo_blue_dark));if (null != typeFace) {message.setTypeface(typeFace);}}@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)// android.R.color.holo_blue_darkprivate void setAlertDialogBtnView(AlertDialog dlg, Typeface typeFace) {Button btn = (Button)dlg.getButton(DialogInterface.BUTTON_POSITIVE);btn.setTextColor(getResources().getColor(android.R.color.holo_blue_dark));if (null != typeFace) {btn.setTypeface(typeFace);}setButtonClickEvent(btn);}private void setButtonClickEvent(Button btn) {btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {toast("Test click!");}});btn.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {toast("Test long click!");return false;}});}private void toast(String message) {Toast.makeText(this, message, Toast.LENGTH_SHORT).show();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_show_dialog:showDialogView();break;case R.id.btn_show_dialog_listener:showDialogViewOnShowListener();break;default:break;}}}

代码下载: 点击地址

更多相关文章

  1. android EditText设置不可写
  2. android 使用html5作布局文件: webview跟javascript交互
  3. Android(安卓)环境搭建
  4. android studio调试c/c++代码
  5. IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
  6. 锁屏界面
  7. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  8. 在Fragment中设置控件点击方法,执行失败。
  9. Android(安卓)version and Linux Kernel version

随机推荐

  1. 一分钟解决Shape分割线及分割线圆角框
  2. android沉浸式状态栏和状态栏字体设置工
  3. android in practice_Threads and concur
  4. Why your Android(安卓)Apps Suck
  5. Google cardBoard Android(安卓)API (十
  6. Android(安卓)控件GridView的使用
  7. Android(安卓)Call disconnected reason
  8. 关于安卓广播无法启动接收器的问题
  9. Android底层知识Window和WindowManager深
  10. okhttp http 重定向到https