本文轉自:http://blog.csdn.net/tanjunjie621/article/details/6689639
在我們使用Dialog時,如果需要用到很多自己設計的控件,雖然可以讓彈出框顯示出我們需要的界面,但卻無法找到地方完成控制代碼的編寫,如何解決這個問題呢,我們可以將Activity偽裝成Dialog彈出框,這樣即顯示了界面,在Activity里寫控制代碼也是大家的拿手好戲了,現在我就來拋磚引玉說說簡單的實現吧。
首先,問題的關鍵在MainActivity里的一句 android:theme="@android:style/Theme.Dialog",這就是Activity的Dialog風格。
我們先創建一個main.xml,內容如下
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/showString"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="在這里顯示dialog里輸入的數字:"
- />
- <Button
- android:id="@+id/openButton"
- android:text="點此打開Dialog"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
再創建一個textdialog.xml,內容如下
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <EditText
- android:id="@+id/et"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- <Button
- android:id="@+id/returnButton"
- android:text="請輸入字符"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
- </pre>現在在MainActivity里寫下如下代碼,都是很基本的代碼,相信大家都能看懂<p></p><p><span style="font-size:16px"><span style="font-size:16px"></span></span></p><pre name="code" class="java">public class MainActivity extends Activity {
- private Button openButton;
- private TextView showString;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- openButton = (Button)findViewById(R.id.openButton);
- showString = (TextView)findViewById(R.id.showString);
- openButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- //這里用到了返回試Activity的基本用法,因為和主題無關,就不多解釋了
- Intent i = new Intent(MainActivity.this, testDialog.class);
- startActivityForResult(i, 0);
- }
- });
- }
- //利用返回試Activity接收輸入的數據並顯示,證明我們的Dialog式的Activity確實可以完成數據的處理
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- //取出字符串
- Bundle bundle = data.getExtras();
- String str = bundle.getString("str");
- showString.setText(str);
- }
- }
下面是testDialog的編程,你可以看出這個Dialog和正常的Activity就沒什么區別,但它最后確實可以像Dialog一樣彈出
- ublic class testDialog extends Activity{
- private Button returnButton;
- private EditText inputEditor;
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.textdialog);
- returnButton = (Button)findViewById(R.id.returnButton);
- inputEditor = (EditText)findViewById(R.id.et);
- //和前面一樣,只是用到了返回式Activity的基本方法,雖然這里已經是個Dialog了,但卻和普通Activity無異
- returnButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- String input = inputEditor.getText().toString();
- Intent i = new Intent(testDialog.this, MainActivity.class);
- Bundle b = new Bundle();
- b.putString("str", input);
- i.putExtras(b);
- testDialog.this.setResult(RESULT_OK, i);
- testDialog.this.finish();
- }
- });
- }
- }
最后的亮點,設置Activity的Dialog風格,在MainActivity里注冊下第二個Activity吧,別完了風格設置哦
- <activity android:name=".testDialog"
- android:label="這是一個Activity變成的Dialog"
- android:theme="@android:style/Theme.Dialog"
- ></activity>
好了,你可以運行一下了,如果正常,你將看到和我一樣的結果