[轉]如何利用Activity的Dialog風格完成彈出框設計


本文轉自:http://blog.csdn.net/tanjunjie621/article/details/6689639

 

在我們使用Dialog時,如果需要用到很多自己設計的控件,雖然可以讓彈出框顯示出我們需要的界面,但卻無法找到地方完成控制代碼的編寫,如何解決這個問題呢,我們可以將Activity偽裝成Dialog彈出框,這樣即顯示了界面,在Activity里寫控制代碼也是大家的拿手好戲了,現在我就來拋磚引玉說說簡單的實現吧。


首先,問題的關鍵在MainActivity里的一句 android:theme="@android:style/Theme.Dialog",這就是Activity的Dialog風格。

我們先創建一個main.xml,內容如下

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:id="@+id/showString"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="在這里顯示dialog里輸入的數字:"  
  12.     />  
  13.   <Button   
  14.     android:id="@+id/openButton"  
  15.     android:text="點此打開Dialog"  
  16.     android:layout_width="fill_parent"  
  17.     android:layout_height="wrap_content"  
  18.   />    
  19. </LinearLayout>  


再創建一個textdialog.xml,內容如下

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:orientation="vertical"  
  5.   android:layout_width="match_parent"  
  6.   android:layout_height="match_parent">  
  7. <EditText   
  8.     android:id="@+id/et"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content"  
  11.     />     
  12. <Button   
  13.     android:id="@+id/returnButton"  
  14.     android:text="請輸入字符"  
  15.     android:layout_width="fill_parent"  
  16.     android:layout_height="wrap_content"  
  17.     />      
  18. </LinearLayout>  



 

 

  1. </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 {  
  2.       
  3.     private Button openButton;  
  4.     private TextView showString;  
  5.       
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         openButton = (Button)findViewById(R.id.openButton);  
  11.         showString = (TextView)findViewById(R.id.showString);  
  12.           
  13.         openButton.setOnClickListener(new OnClickListener() {  
  14.               
  15.         public void onClick(View v) {  
  16.                 //這里用到了返回試Activity的基本用法,因為和主題無關,就不多解釋了  
  17.                 Intent i = new Intent(MainActivity.this, testDialog.class);  
  18.                 startActivityForResult(i, 0);  
  19.             }  
  20.         });  
  21.           
  22.     }  
  23.       
  24.     //利用返回試Activity接收輸入的數據並顯示,證明我們的Dialog式的Activity確實可以完成數據的處理  
  25.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  26.         super.onActivityResult(requestCode, resultCode, data);  
  27.         //取出字符串  
  28.         Bundle bundle = data.getExtras();  
  29.         String str = bundle.getString("str");  
  30.         showString.setText(str);  
  31.     }  
  32. }  


下面是testDialog的編程,你可以看出這個Dialog和正常的Activity就沒什么區別,但它最后確實可以像Dialog一樣彈出

  1. ublic class testDialog extends Activity{  
  2.       
  3.     private Button returnButton;  
  4.     private EditText inputEditor;  
  5.       
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.textdialog);  
  9.           
  10.         returnButton = (Button)findViewById(R.id.returnButton);  
  11.         inputEditor = (EditText)findViewById(R.id.et);  
  12.           
  13.         //和前面一樣,只是用到了返回式Activity的基本方法,雖然這里已經是個Dialog了,但卻和普通Activity無異   
  14.         returnButton.setOnClickListener(new OnClickListener() {  
  15.             public void onClick(View v) {  
  16.                 String input = inputEditor.getText().toString();  
  17.                 Intent i = new Intent(testDialog.this, MainActivity.class);  
  18.                 Bundle b = new Bundle();  
  19.                 b.putString("str", input);  
  20.                 i.putExtras(b);  
  21.                 testDialog.this.setResult(RESULT_OK, i);  
  22.                 testDialog.this.finish();  
  23.             }  
  24.         });  
  25.     }  
  26. }  


最后的亮點,設置Activity的Dialog風格,在MainActivity里注冊下第二個Activity吧,別完了風格設置哦

 

 

  1. <activity android:name=".testDialog"  
  2.               android:label="這是一個Activity變成的Dialog"  
  3.               android:theme="@android:style/Theme.Dialog"  
  4.         ></activity>  


好了,你可以運行一下了,如果正常,你將看到和我一樣的結果

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM