使用AlertDialog.Builder創建對話框

Android 中經常需要使用對話框,對此進行總結。

主要涉及到的對話框有Dialog、AlertDialog、ProgressDialog、TimePickerDialog、DatePickerDialog。

其中AlertDialog是用到的最多的,且內容設置方法最多的類型。

首先,AlertDialog的構造方法是protected類型,故不能直接通過構造方法新建AlertDialog。

如果使用AlertDialog的話:
  1. 使用AlertDialog.Builder
  2. 新建一個對話框類繼承至AlertDialog,再使用該對話框類新建
這篇文章主要介紹第一種使用AlertDialog.Builder新建。



在AlertDialog.Builder中分爲
  1. 圖標區,使用AlertDialog.Builder的setIcon()設置圖標
  2. 標題區,使用AlertDialog.Builder的setTitle()或者setCustomTitle()方法設置標題。
  3. 內容區,   使用AlertDialog.Builder的相關方法設置對話框的內容
    • setMessage                        設置對話內容爲簡單文本內容
    • setItems                              設置對話框內容爲簡單列表項
    • setSingleChoiceItems         設置對話框內容爲單選列表項
    • setMultiChoiceItems           設置對話框內容爲多選列表項
    • setAdapter                          設置對話框內容爲自定義列表項
    • setView                               設置對話框的內容爲自定義View
  4. 按鈕區,使用setPositiveButton()  setNegativeButton()  setNeutralButton()設置按鈕。

eg:
public class MainActivity extends ActionBarActivity implements OnClickListener {

	String items[];
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initView();
		items = new String[]{"123","456","789"};

	}

	private void initView() {
		findViewById(R.id.button1).setOnClickListener(this);
		findViewById(R.id.button2).setOnClickListener(this);
		findViewById(R.id.button3).setOnClickListener(this);
		findViewById(R.id.button4).setOnClickListener(this);
		findViewById(R.id.button5).setOnClickListener(this);
		findViewById(R.id.button6).setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button1:
			AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this)
				.setIcon(R.drawable.ic_launcher)
				.setTitle("這是標題區")
				.setMessage("這是內容區")
				.setPositiveButton("確認", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				});
			builder1.create().show();
			break;
		case R.id.button2:
			AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this)
				.setTitle("helloWorld")
				.setIcon(R.drawable.ic_launcher)
				.setItems(items, new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this, items[which], 1000).show();
					}
				});
			builder2.create().show();
			break;
		case R.id.button3:
			AlertDialog.Builder builder3 = new AlertDialog.Builder(MainActivity.this)
			.setTitle("helloWorld")
			.setIcon(R.drawable.ic_launcher)
			.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, items[which], 1000).show();
				}
			});
			builder3.create().show();
			break;
		case R.id.button4:
			AlertDialog.Builder builder4 = new AlertDialog.Builder(MainActivity.this)
			.setTitle("helloWorld")
			.setIcon(R.drawable.ic_launcher)
			.setMultiChoiceItems(items, new boolean[]{true, false, true}, new OnMultiChoiceClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which, boolean isChecked) {
					// TODO Auto-generated method stub
					
				}
			});
			builder4.create().show();
			break;
		case R.id.button5:
			AlertDialog.Builder builder5 = new AlertDialog.Builder(MainActivity.this)
			.setTitle("helloWorld")
			.setIcon(R.drawable.ic_launcher)
			.setView(new EditText(this))
			.setPositiveButton("確定", null);
			
			builder5.create().show();
			break;
		case R.id.button6:
			View ly = getLayoutInflater().inflate(R.layout.dialog, null);
			AlertDialog.Builder builder6 = new AlertDialog.Builder(MainActivity.this)
			.setTitle("helloWorld")
			.setIcon(R.drawable.ic_launcher)
			.setView(ly);
			builder6.create().show();
			break;
		}
	}
}

button1展示的對話框如圖示:

button2展示的對話框如圖示:

button3展示的對話框如圖示:

button4展示的對話框如圖示:

button5展示的對話框如圖示:

button6展示的對話框如圖示:



附:爲什麼create()和show()沒有和set的方法連寫?
答:create和show返回的是AlertDialog類型,而set方法返回的是AlertDialog.Builder類型。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章