重写Dialog,让Dialog成为类似于数字键盘

    今天我要写的是重写Dialog,让Dialog成为类似于数字键盘,可以输入数字,我顺便还写了个“正在保存......”的对话框。好了,话不多说,先看效果图:

       

      由图就可以知道,程序的效果,下面来看看程序代码:
重写Dialog的NewDialog.java代码:

package com.android.newDialog;

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;

public class NewDialog extends Dialog {

	public NewDialog(Context context, int theme) {
		super(context, theme);
		// TODO Auto-generated constructor stub
	}

	/**
	 * @author Jasonzhou
	 * @param context
	 *            NewDialog的上下文
	 * @param theme
	 *            NewDialog的显示主题,比如可以是noTitile等
	 * @param view
	 *            NewDialog的view
	 */
	public NewDialog(Context context, int theme, View view) {
		super(context, theme);
		setContentView(view);
		Window wi = getWindow();

		WindowManager.LayoutParams params = wi.getAttributes();
		params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
	}

	/**
	 * @author Jasonzhou
	 * @param context
	 *            NewDialog的上下文
	 * @param theme
	 *            NewDialog的显示主题,比如可以是noTitile等
	 * @param view
	 *            NewDialog的view
	 * @param width
	 *            NewDialog的宽度
	 * @param height
	 *            NewDialog的高度
	 */
	public NewDialog(Context context, int theme, int view, int width,
			int height) {
		super(context, theme);
		setContentView(view);
		// set window params
		Window window = getWindow();
		WindowManager.LayoutParams params = window.getAttributes();
		// set width,height by density and gravity
		float density = getDensity(context);
		params.width = (int) (width * density);
		params.height = (int) (height * density);
		params.gravity = Gravity.CENTER ;
		window.setAttributes(params);
	}

	private float getDensity(Context context) {
		Resources resources = context.getResources();
		DisplayMetrics dm = resources.getDisplayMetrics();
		return dm.density;
	}
}

显示第一张图片效果的代码:NewDialogActivity.java

package com.android.newDialog;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class NewDialogActivity extends Activity implements OnClickListener {
	private Button bt;
	private EditText et;
	private String income = "";
	private String pay = "";
	private View keypadView;
	NewDialog dialog;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initialWidget();
		dialog = new NewDialog(NewDialogActivity.this, R.style.Theme_dialog,
				keypadView);
		dialog.setTitle("www");

		bt = (Button) findViewById(R.id.button1);

		bt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialog.show();
			}
		});

	}

	private void initialWidget() {
		LayoutInflater li = LayoutInflater.from(NewDialogActivity.this);
		keypadView = li.inflate(R.layout.keyboard_digit, null);

		keypadView.findViewById(R.id.zero).setOnClickListener(this);
		keypadView.findViewById(R.id.one).setOnClickListener(this);
		keypadView.findViewById(R.id.two).setOnClickListener(this);
		keypadView.findViewById(R.id.three).setOnClickListener(this);
		keypadView.findViewById(R.id.four).setOnClickListener(this);
		keypadView.findViewById(R.id.five).setOnClickListener(this);
		keypadView.findViewById(R.id.six).setOnClickListener(this);
		keypadView.findViewById(R.id.seven).setOnClickListener(this);
		keypadView.findViewById(R.id.eight).setOnClickListener(this);
		keypadView.findViewById(R.id.nine).setOnClickListener(this);

		keypadView.findViewById(R.id.point).setOnClickListener(this);
		keypadView.findViewById(R.id.delete).setOnClickListener(this);
		keypadView.findViewById(R.id.cancel).setOnClickListener(this);
		keypadView.findViewById(R.id.clean).setOnClickListener(this);
		keypadView.findViewById(R.id.done).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.zero:
			onKeypadPressed("0");
			break;
		case R.id.one:
			onKeypadPressed("1");
			break;
		case R.id.two:
			onKeypadPressed("2");
			break;
		case R.id.three:
			onKeypadPressed("3");
			break;
		case R.id.four:
			onKeypadPressed("4");
			break;
		case R.id.five:
			onKeypadPressed("5");
			break;
		case R.id.six:
			onKeypadPressed("6");
			break;
		case R.id.seven:
			onKeypadPressed("7");
			break;
		case R.id.eight:
			onKeypadPressed("8");
			break;
		case R.id.nine:
			onKeypadPressed("9");
			break;

		case R.id.point:
			onKeypadPressed(".");
			break;
		case R.id.delete:
			onKeypadPressed("delete");
			break;
		case R.id.cancel:
			onKeypadPressed("cancel");
			break;
		case R.id.clean:
			onKeypadPressed("clean");
			break;
		case R.id.done:
			onKeypadPressed("done");
			break;
		default:
			break;
		}
	}

	private void onKeypadPressed(String str) {
		if (str.equals("delete")) {// 单击的是回退键
			income = income.substring(0, income.length() - 1);

		} else if (str.equals("clean")) {// 单击的是清除键
			income = "";
			bt.setText("0");

		} else if (str.equals("done")) {// 单击的是完成键
			if (income.equals("") || income.equals("0")) {
				Toast.makeText(NewDialogActivity.this, "请输入金额",
						Toast.LENGTH_SHORT).show();
			}
			dialog.dismiss();

		} else if (str.equals("cancel")) {// 单击的是取消键
			dialog.dismiss();

		} else {// 按的是数字键
			if (income.equals("0")) {
				income = str;
			} else {
				income = income + str;
			}
			bt.setText(income);
		}
	}
}


显示第二张图片效果的代码:Dialog02.java

package com.android.newDialog;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Dialog02 extends Activity {
	private Button back;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dialog02_01);
		

		NewDialog dialog2 = new NewDialog(this, R.style.Theme_dialog, R.layout.dialog02_02, 180, 120);
		
		dialog2.show();// 显示Dialog
		// 如果要修改Dialog中的某个View,比如把"正在删除..."改为"加载中..."
		TextView mMessage = (TextView) dialog2.findViewById(R.id.dialog02Tv);
		mMessage.setText("正在保存...");
	}
}

下面我们来看看styles.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="keypad_btn">
        <item name="android:textSize">40.0dip</item>
        <item name="android:textColor">#000000</item>
        <item name="android:focusable">true</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginTop">2.0dip</item>
        <item name="android:layout_weight">1.0</item>
    </style>

    <style name="keypad_row_ly_hdip">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">1.0</item>
    </style>

    <style name="keypad_digit_btn" parent="@style/keypad_btn">
        <item name="android:background">@drawable/digit_pressed</item>
    </style>

    <style name="keypad_clean_btn">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@drawable/clean_pressed</item>
        <item name="android:layout_weight">1.0</item>
    </style>

    <style name="keypad_cancel_btn">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@drawable/cancel_pressed</item>
        <item name="android:layout_weight">1.0</item>
    </style>

    <style name="keypad_done_btn">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@drawable/done_pressed</item>
        <item name="android:layout_weight">1.0</item>
    </style>

    <style name="keypad_delete_btn" parent="@style/keypad_btn">
        <item name="android:background">@drawable/delete_pressed</item>
    </style>
    <!-- 重写了Dialog,定义NewDialog的样式为NoTitle -->

    <style name="Theme_dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
    </style>

</resources>


    其实这里最主要的还是重写Dialog的那个类,附上代码下载的地址:android中重写Dialog
各位网友可以发挥想象,定义出不一样的风格。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值