2011年8月31日 星期三

activity 用 setTheme 的方法來達成透明

要使用Theme可以直接在AndroidManifest.xml中設定,比如:
<activity android:name=".testTheme"
            "@android:style/Theme.Dialog"/> 


另外在官網可以看到setTheme()這個方法,但是就算你按規定寫成
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(android.R.style.Theme_Dialog);
        setContentView(R.layout.main);
    }
卻會發現根本沒有作用。


通常會想使用setTheme()的原因是為了在程式執行時期runtime時,動態dynamic決定要使用那一種Theme,為了達到讓setTheme產生功能,程式的寫法要注意兩個地方
(1) AndroidManifest.xml指定一個theme
(2) override setTheme方法

程式如下:


(1) AndroidManifest.xml先指定一個 default theme
        <activity android:name=".Main"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.Dialog">
        </activity>


(2) 程式動態決定要用那一種 Theme
public class Main extends Activity {
    private boolean isDialog = false;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
   
    @Override
    public void setTheme(int resid){
        if(!isDialog){
            super.setTheme(android.R.style.Theme_Translucent);
        }else{
            super.setTheme(android.R.style.Theme_Dialog);
        }
       
    }
}

執行結果如下
(1) 透明Translucent






















(2) Dialog