轉載時請記得標明源地址:https://my.oschina.net/lijindou/blog/789864
本人博客地址: http://my.oschina.net/lijindou/blog
源碼地址:http://download.csdn.net/detail/qq_33144317/9685481
上圖:
第一次製作這種圖,做的很醜,請大家見諒:
上代碼:
這個是MainActivity.java中的代碼:
import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import java.io.File; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Activity activity = MainActivity.this; private static final String TAG = "MainActivity"; private Button but1; private Button but2; private Button but3; private Button but4; private Button but5; private Button but6; private Button but7; private Button but8; private Button but9; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initData(); addEvent(); } private void initViews() { but1 = (Button) findViewById(R.id.but1); but2 = (Button) findViewById(R.id.but2); but3 = (Button) findViewById(R.id.but3); but4 = (Button) findViewById(R.id.but4); but5 = (Button) findViewById(R.id.but5); but6 = (Button) findViewById(R.id.but6); but7 = (Button) findViewById(R.id.but7); but8 = (Button) findViewById(R.id.but8); but9 = (Button) findViewById(R.id.but9); } private void initData() { } private void addEvent() { but1.setOnClickListener(this); but2.setOnClickListener(this); but3.setOnClickListener(this); but4.setOnClickListener(this); but5.setOnClickListener(this); but6.setOnClickListener(this); but7.setOnClickListener(this); but8.setOnClickListener(this); but9.setOnClickListener(this); // but10.setOnClickListener(this); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { backDialog(); } return false; } void backDialog() {//這個是可以在退出的時候出現的一個dialog AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage("確認退出嗎?"); builder.setTitle("提示"); builder.setPositiveButton("確認", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); activity.finish(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } void butDialog() { // 改變了對話框的圖表,添加了三個按鈕 // 創建dialog的方法代碼如下: Dialog dialog = new AlertDialog.Builder(this).setIcon(android.R.drawable.btn_star).setTitle("啦啦啦") .setMessage("這裏有三個按鈕,在6.0以前的時候這三個按鈕是平均分佈的,按鈕顯示是從右向左") .setPositiveButton("第一個", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(activity, "第一個。", Toast.LENGTH_LONG).show(); } }) .setNegativeButton("第二個", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(activity, "第二個。", Toast.LENGTH_LONG).show(); } }) .setNeutralButton("第三個", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(activity, "第三個。", Toast.LENGTH_LONG).show(); } }).create(); dialog.show(); } void dialog2() { // 信息內容是一個簡單的View類型 // 創建dialog方法的代碼如下: final EditText editText = new EditText(this); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("這是個ET,系統的輸入框").setIcon(android.R.drawable.ic_dialog_info).setView( editText).setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(activity, "確定 文本框的值==" + editText.getText().toString(), Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(activity, "取消", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }).show(); } private void dialog3() { final String items[] = {"1", "2", "3", "4", "5", "6"};//這裏是設置選項的個數和內容 final boolean selected[] = {true, false, true, true, false, true};//這裏 是 設置 是否 選中的 AlertDialog.Builder builder = new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // dialog.dismiss(); //每次 點擊 時 都會 執行這個 方法 Toast.makeText(activity, items[which] + isChecked, Toast.LENGTH_SHORT).show(); } }); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Toast.makeText(activity, "確定", Toast.LENGTH_SHORT).show(); //android會自動根據你選擇的改變selected數組的值。 for (int i = 0; i < selected.length; i++) {//這個 是點擊確定後的選項的值 Log.e(TAG, "看看 這個 selected 的值爲 == " + selected[i]); } } }); builder.create().show(); } void dialog4() { final String items[] = {"1", "2"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("標題"); //設置標題 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {//第二個參數是 設置 默認選中第幾項的 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Toast.makeText(activity, items[which], Toast.LENGTH_SHORT).show(); } }); // builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialog, int which) { // Log.e(TAG, "onClick: which==" + which); // Toast.makeText(activity, "確定 選擇了===", Toast.LENGTH_SHORT).show(); // dialog.dismiss(); // // // } // }); builder.create().show(); } void dialog5() { // 信息內容是一組簡單列表項 // 創建dialog的方法代碼如下: final String items[] = {"1", "2", "3", "4", "5", "6"}; //dialog參數設置 AlertDialog.Builder builder = new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("標題"); //設置標題 //builder.setMessage("是否確認退出?"); //設置內容 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 //設置列表顯示,注意設置了列表顯示就不要設置builder.setMessage()了,否則列表不起作用。 builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show(); } }); // builder.setPositiveButton("確定",new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialog, int which) { // dialog.dismiss(); // Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show(); // } // }); builder.create().show(); } void dialog6() { // 創建dialog方法的代碼如下: LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.item, (ViewGroup) findViewById(R.id.dialog)); final EditText editText = (EditText) layout.findViewById(R.id.etname); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("自定義佈局").setView(layout) .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(activity, editText.getText().toString(), Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } private void dialog7() { final UIAlertView delDialog = new UIAlertView(activity, "標題", "親~想要麼", "不要", "要要要"); delDialog.show(); delDialog.setonClicklistener( new UIAlertView.ClickListenerInterface() { public void doLeft() { Toast.makeText(activity, "不要", Toast.LENGTH_SHORT).show(); delDialog.dismiss(); } public void doRight() { Toast.makeText(activity, "要要要", Toast.LENGTH_SHORT).show(); delDialog.dismiss(); } } ); } private void dialog8() { View view = this.getLayoutInflater().inflate(R.layout.item_photo, null); Button picturelib = (Button) view.findViewById(R.id.picturelib); Button carema = (Button) view.findViewById(R.id.camera); Button cancle = (Button) view.findViewById(R.id.cancle); final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle); dialog.setContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); Window window = dialog.getWindow(); // window.setWindowAnimations(R.style.main_menu_animstyle); WindowManager.LayoutParams wl = window.getAttributes(); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int Width = displaymetrics.widthPixels; wl.x = 0; wl.y = height; wl.width = ViewGroup.LayoutParams.MATCH_PARENT; wl.height = ViewGroup.LayoutParams.WRAP_CONTENT; dialog.onWindowAttributesChanged(wl); dialog.setCanceledOnTouchOutside(true); dialog.show(); picturelib.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // //調用相機 // Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // cameraFile = DiskUtils.generatePhotoFile(MeUserMessageActivity.this); // intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); // startActivityForResult(intent1, 返回值拍照照片不保存照片但進行裁剪); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"))); } }); carema.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // //調用相冊 // Intent openAlbumIntent1 = new Intent(Intent.ACTION_GET_CONTENT); // openAlbumIntent1.setType("image/*"); // startActivityForResult(openAlbumIntent1, 返回值調用相冊並進行裁剪); Intent intent = new Intent(); // Toast.makeText(MeUserMessageActivity.this, "xiangce", Toast.LENGTH_LONG).show(); /** * 下面這句話,與其它方式寫是一樣的效果,如果: * intent.setData(MediaStore * .Images.Media.EXTERNAL_CONTENT_URI); * intent.setType(""image/*");設置數據類型 * 如果朋友們要限制上傳到服務器的圖片類型時可以直接寫如 * :"image/jpeg 、 image/png等的類型" */ intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Complete action using"), 0); } }); cancle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.cancel(); } }); } private void dialog9() { LayoutInflater inflater = LayoutInflater.from(this); LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.dialog_update, null); final Dialog dialog = new android.app.AlertDialog.Builder(this).create(); dialog.show(); dialog.getWindow().setContentView(layout); dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); dialog.setCanceledOnTouchOutside(false); TextView btnOK = (TextView) layout.findViewById(R.id.tv_update_OK); TextView btnCancel = (TextView) layout.findViewById(R.id.tv_update_cancel); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(activity, "取消更新", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); btnOK.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(activity, "開始更新", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.but1: butDialog(); break; case R.id.but2: dialog2(); break; case R.id.but3: dialog3(); break; case R.id.but4: dialog4(); break; case R.id.but5: dialog5(); break; case R.id.but6: dialog6(); break; case R.id.but7: dialog7(); break; case R.id.but8: dialog8(); break; case R.id.but9: dialog9(); break; // case R.id.but10: // // break; // case R.id.but11: // // break; // case R.id.but12: // // break; } } }
這個是一個自定義View的代碼:
import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; public class UIAlertView extends Dialog { private Context context; private String title; private String message; private String buttonLeftText; private String buttonRightText; private ClickListenerInterface clickListenerInterface; public UIAlertView(Context context, String title, String message, String buttonLeftText, String buttonRightText) { super(context, R.style.UIAlertViewStyle); this.context = context; this.title = title; this.message = message; this.buttonLeftText = buttonLeftText; this.buttonRightText = buttonRightText; } public interface ClickListenerInterface { public void doLeft(); public void doRight(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); inite(); } public void inite() { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.ui_alert_view, null); setContentView(view); TextView tvMessage = (TextView) view.findViewById(R.id.tvMessage); TextView tvLeft = (TextView) view.findViewById(R.id.tvBtnLeft); TextView tvRight = (TextView) view.findViewById(R.id.tvBtnRight); TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle); if ("".equals(title)) { tvTitle.setVisibility(View.GONE); } else { tvTitle.setText(title); } tvMessage.setText(message); tvLeft.setText(buttonLeftText); tvRight.setText(buttonRightText); tvLeft.setOnClickListener(new clickListener()); tvRight.setOnClickListener(new clickListener()); Window dialogWindow = getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); DisplayMetrics d = context.getResources().getDisplayMetrics(); lp.width = (int) (d.widthPixels * 0.8); dialogWindow.setAttributes(lp); } public void setonClicklistener(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } private class clickListener implements View.OnClickListener { public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.tvBtnLeft: clickListenerInterface.doLeft(); break; case R.id.tvBtnRight: clickListenerInterface.doRight(); break; default: break; } } } ; }
佈局的代碼:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" tools:context="dialog.com.dialogall.MainActivity"> <Button android:id="@+id/but1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="三個選項的" /> <Button android:id="@+id/but2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="輸入框" /> <Button android:id="@+id/but3" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="多選框" /> <Button android:id="@+id/but4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="單選框" /> <Button android:id="@+id/but5" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="列表" /> <Button android:id="@+id/but6" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="自定義佈局" /> <Button android:id="@+id/but7" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="自定義控件" /> <Button android:id="@+id/but8" android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="仿蘋果的選擇照片" /> <Button android:id="@+id/but9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="自定義佈局(提示更新)" /> </LinearLayout> </ScrollView>