由图就可以知道,程序的效果,下面来看看程序代码:
重写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
各位网友可以发挥想象,定义出不一样的风格。