休言女子非英物,夜夜龙泉壁上鸣。这篇文章主要讲述Android自己定义提示框相关的知识,希望能为你提供帮助。
在开发中,假设感觉系统自带的提示框不好看,开发人员能够自定义提示框的样式。主要是继承Dialog
文章图片
程序文件夹结构
文章图片
关键代码
package com.dzt.custom.dialog; import android.app.Dialog; import android.content.Context; import android.content.res.Resources; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; /** * 自己定义对话框 * * */ public class CustomDialog extends Dialog implements android.view.View.OnClickListener { private static int default_width = 400; // 默认宽度 private static int default_height = 200; // 默认高度 private static String mShowText = null; private TextView mText = null; public CustomDialog(Context context) { super(context); } public CustomDialog(Context context, int layout, int style, String msg) { this(context, default_width, default_height, layout, style, msg); } public CustomDialog(Context context, int width, int height, int layout, int style, String msg) { super(context, style); // 设置内容 setContentView(layout); mShowText = msg; initWidgets(); // 设置窗体属性 Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); // 设置宽度、高度、密度、对齐方式 float density = getDensity(context); params.width = (int) (width * density); params.height = (int) (height * density); params.gravity = Gravity.CENTER; window.setAttributes(params); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); System.out.println("stop"); } /** * 初始化提示框中的控件 */ private void initWidgets() { CustomImageButton btn = (CustomImageButton) findViewById(R.id.btn_ok); btn.setOnClickListener(this); btn = (CustomImageButton) findViewById(R.id.btn_cancel); btn.setOnClickListener(this); mText = (TextView) findViewById(R.id.dlg_tv_text); mText.setText(mShowText); } /** * 获取显示密度 * * @param context * @return */ public float getDensity(Context context) { Resources res = context.getResources(); DisplayMetrics dm = res.getDisplayMetrics(); return dm.density; } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn_ok: if (listener != null) listener.onClickOk(); System.out.println("you click ok button---------"); break; case R.id.btn_cancel: if (listener != null) listener.onClickCancel(); System.out.println("you click cancel button-------"); break; default: break; } } public void setOnClickBtnListener(OnClickBtnListener listener) { this.listener = listener; } private OnClickBtnListener listener = null; public interface OnClickBtnListener { public void onClickOk(); public void onClickCancel(); } }
在提示框中对两个按钮设置了监听器。按钮也是自己定义的
package com.dzt.custom.dialog; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Align; import android.util.AttributeSet; import android.util.Log; import android.widget.ImageButton; /** * 自己定义ImageButton 能够在ImageButton上面设置文字 */ public class CustomImageButton extends ImageButton { private static final String TAG = "CustomImageButton_dzt"; private String mtext = ""; private int mcolor = 0; private float mtextsize = 0f; private Paint mpatin; public CustomImageButton(Context context, AttributeSet attrs) { super(context, attrs); initAttrs(attrs); } private void initAttrs(AttributeSet attrs) { TypedArray array = getContext().obtainStyledAttributes(attrs, R.styleable.CustomButtonAttrs); mtext = array.getString(R.styleable.CustomButtonAttrs_textValue); mcolor = array.getColor(R.styleable.CustomButtonAttrs_textColor, 230); mtextsize = array.getDimension(R.styleable.CustomButtonAttrs_textSize, 25.0f); array.recycle(); // 回收资源 mpatin = new Paint(); mpatin.setTextAlign(Align.CENTER); Log.d(TAG, "mtextsize = " + mtextsize); } public void setText(String text) { this.mtext = text; } public void setColor(int color) { this.mcolor = color; } public void setTextSize(float textsize) { this.mtextsize = textsize; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mpatin.setColor(mcolor); mpatin.setTextSize(mtextsize); canvas.drawText(mtext, canvas.getWidth() / 2, (canvas.getHeight() / 2)+10, mpatin); } }
在调用时也很easy
@Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn_show_dialog: customDialog = new CustomDialog(this, R.layout.dialog_layout, R.style.DialogTheme, getResources().getString( R.string.text_show)); customDialog.show(); customDialog.setOnClickBtnListener(new OnClickBtnListener() {@Override public void onClickOk() { // TODO Auto-generated method stub System.out.println("you click ok button"); // 处理点击OK时的操作 // ............... customDialog.cancel(); }@Override public void onClickCancel() { // TODO Auto-generated method stub System.out.println("you click cancel button"); // 处理点击Cancel时的操作 // ................... customDialog.cancel(); } }); break; default: break; } }
须要源代码的能够到:http://download.csdn.net/detail/deng0zhaotai/7760615
【Android自己定义提示框】
推荐阅读
- Android-smali语法学习
- Android实战简易教程-第二十九枪(基于Face++实现年龄识别APP)
- android--手机桌面添加网址链接图标(解决方式二)
- android的工厂模式
- [android]DES/3DES/AES加密方式
- Android Studio提示: Application Installation Failed
- (博弈sg) Codeforces Round #417 (Div. 2) E Sagheer and Apple Tree
- Android 6.0以上 需要运行时申请的权限
- 干货(app用户插画设计)