Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android--從零單排系列(4)--常用對話框和DialogFragment的優勢

Android--從零單排系列(4)--常用對話框和DialogFragment的優勢

編輯:關於Android編程

(一):DialogFragment的使用

優點:

* 1,屏幕的選擇和按下返回鍵能更好的管理它的什麼周期方法
* 2,DialogFragment也允許開發者把Dialog作為內嵌的組件進行重用,
    類似Fragment(可以在大屏幕和小屏幕顯示出不同的效果)
* 3,橫豎屏切換,傳統的new AlertDialog在屏幕旋轉時, 第一不會保存用戶輸入的值,
    而通過DialogFragment實現的對話框則可以完全不必考慮旋轉的問題。

##使用方式

 * 兩種方式創建
 * 1,onCreateView即使用定義的xml布局文件展示Dialog。
 * 或者
 * 2,onCreateDialog即利用AlertDialog或者Dialog創建出Dialog。

方式一:1,onCreateView即使用定義的xml布局文件展示Dialog。

第一步:

寫一個EditNameDialogFragment(我沒寫的dialog) 集成DialogFragment
public class EditNameDialogFragment extends DialogFragment{
    /**
     * 兩種方式創建
     * 1,onCreateView即使用定義的xml布局文件展示Dialog。
     * 或者
     * 2,onCreateDialog即利用AlertDialog或者Dialog創建出Dialog。
     */
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       //去掉線條
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        View view = inflater.inflate(R.layout.dialog_fragment, container);
        return view;
    }
}

第二步:寫出DialogFragment的XML文件,然後在第一步引用即可完成




    

    

    

方式二:2,onCreateDialog即利用AlertDialog或者Dialog創建出Dialog。

第一步:直接代碼中解決,這裡自定義了一個listenner實現Dialog數據傳入到Activity中去

public class LoginLoginDialogFragment extends DialogFragment {

    private EditText mUsername;
    private EditText mPassword;

    public interface LoginInputListenner{
        void onLoginInputListenner(String usename,String password);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        View view = getActivity().getLayoutInflater().inflate(R.layout.login_fragment, null);
        mUsername = (EditText) view.findViewById(R.id.id_txt_username);
        mPassword = (EditText) view.findViewById(R.id.id_txt_password);
        builder.setView(view).setPositiveButton("Sign in", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                LoginInputListenner listenner = (LoginInputListenner) getActivity();
                listenner.onLoginInputListenner(mUsername
                        .getText().toString(), mPassword
                        .getText().toString());

            }
        }).setNegativeButton("Cancel", null);

        return builder.create();
    }
}

第二步:第二種創建方式的XML文件布局




    

    

    

*=========================================華麗的分割線===========================

(二):Dialog的使用

(1)簡單警告框

public class MyDialogDemo extends Activity {  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                super.setContentView(R.layout.main); // 調用布局管理器  
                Dialog dialog = new AlertDialog.Builder(this)  
                        .setTitle("對話框")                // 創建標題  
                        .setMessage("顯示提示信息") // 表示對話框中的內容  
                        .setIcon(R.drawable.pic_m) // 設置LOGO  
                        .create(); // 創建了一個對話框  
                dialog.show() ;        // 顯示對話框  
        }  
} 

(2)多種操作按鈕

public class MyDialogDemo extends Activity {  
        private Button mybut = null ;        // 定義按鈕  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                super.setContentView(R.layout.main); // 調用布局管理器  
                this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
        }  
        private class OnClickListenerImpl implements OnClickListener {  
                @Override  
                public void onClick(View view) {  
                        Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)  
                                .setTitle("確定刪除?")                // 創建標題  
                                .setMessage("您確定要刪除該條信息嗎?") // 表示對話框中的內容  
                                .setIcon(R.drawable.pic_m) // 設置LOGO  
                                .setPositiveButton("刪除", new DialogInterface.OnClickListener() {  
                                        @Override  
                                        public void onClick(DialogInterface dialog, int which) {  

                                        }  
                                }).setNeutralButton("查看詳情", new DialogInterface.OnClickListener() {  
                                        @Override  
                                        public void onClick(DialogInterface dialog, int which) {  

                                        }  
                                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                                        @Override  
                                        public void onClick(DialogInterface dialog, int which) {  

                                        }  
                                }).create(); // 創建了一個對話框  
                        dialog.show() ;        // 顯示對話框  
                }  

        }  

(3)退出按鈕

    public class MyDialogDemo extends Activity {  
            private ImageButton but = null ;        // 定義按鈕  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.but = (ImageButton) super.findViewById(R.id.but) ;        // 取得按鈕  
                    this.but.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            MyDialogDemo.this.exitDialog() ;  
                    }  

            }  
            @Override  
            public boolean onKeyDown(int keyCode, KeyEvent event) { // 監聽鍵盤  
                    if (keyCode == KeyEvent.KEYCODE_BACK) {        // 返回鍵  
                            this.exitDialog() ;  
                    }  
                    return false ;  
            }  
            private void exitDialog(){  
                    Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)  
                            .setTitle("程序退出?")                // 創建標題  
                            .setMessage("您確定要退出本程序嗎?") // 表示對話框中的內容  
                            .setIcon(R.drawable.pic_m) // 設置LOGO  
                            .setPositiveButton("確定", new DialogInterface.OnClickListener() {  
                                    @Override  
                                    public void onClick(DialogInterface dialog, int which) {  
                                            MyDialogDemo.this.finish() ;        // 操作結束  
                                    }  
                            }).setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                                    @Override  
                                    public void onClick(DialogInterface dialog, int which) {  

                                    }  
                            }).create(); // 創建了一個對話框  
                    dialog.show() ;        // 顯示對話框  
            }  
    }  

(4)列表對話框

    public class MyDialogDemo extends Activity {  
            private Button mybut = null ;        // 定義按鈕  
            private TextView mych = null ;        // 定義文本  
            private String fruitData[] = new String[] { "蘋果", "西瓜", "水蜜桃" };  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                    this.mych = (TextView) super.findViewById(R.id.mych) ;        // 取得文本  
                    this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)  
                                    .setIcon(R.drawable.pic_m)  
                                    .setTitle("請選擇你喜歡吃的水果?")  
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  

                                            }  
                                    }).setItems(MyDialogDemo.this.fruitData, new DialogInterface.OnClickListener() {  
                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  
                                                                            MyDialogDemo.this.mych  
                                                                                            .setText("您選擇的水果是:"  
                                                                                                            + MyDialogDemo.this.fruitData[which]);  
                                            }  
                                    }).create() ;  
                            dialog.show() ;  
                    }  

            }  
    }  

(5)單選對話框

    public class MyDialogDemo extends Activity {  
            private Button mybut = null ;        // 定義按鈕  
            private TextView mych = null ;        // 定義文本  
            private TextView mytext = null ;        // 定義文本  
            private String fruitData [] = new String[] { "蘋果", "西瓜", "水蜜桃" };  
            private String fruitDesc [] = new String[] {  
                            "蘋果,植物類水果,多次花果,具有豐富的營養成分,有食療、輔助治療等功能。",  
                            "西瓜(學名:Citrullus Lanatus,英文:Watermelon),屬葫蘆科,原產於非洲。",  
                            "水蜜桃,在植物分類學上屬於薔薇科,梅屬,桃亞屬,為落葉小喬木。"} ;  
            private int chNum = 0 ;        // 保存選項  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                    this.mych = (TextView) super.findViewById(R.id.mych) ;        // 取得文本  
                    this.mytext = (TextView) super.findViewById(R.id.mytext) ;        // 取得文本  
                    this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)  
                                    .setIcon(R.drawable.pic_m)  
                                    .setTitle("請選擇你喜歡吃的水果?")  
                                    .setPositiveButton("確定", new DialogInterface.OnClickListener() {  

                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  
                                                                            MyDialogDemo.this.mych  
                                                                    .setText(MyDialogDemo.this.fruitData[MyDialogDemo.this.chNum]);        // 設置選項的名稱  
                                            }  
                                    })  
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  

                                            }  
                                    }).setSingleChoiceItems(MyDialogDemo.this.fruitData, 0, new DialogInterface.OnClickListener() {  
                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  
                                                                            MyDialogDemo.this.mytext  
                                                                                            .setText(MyDialogDemo.this.fruitDesc[which]);  
                                                                            MyDialogDemo.this.chNum = which ;        // 保存選項的索引  
                                            }  
                                    }).create() ;  
                            dialog.show() ;  
                    }  

            }  
    }  

(6)復選框對話框

    public class MyDialogDemo extends Activity {  
            private Button mybut = null ;        // 定義按鈕  
            private TextView mych = null ;        // 定義文本  
            private String fruitData [] = new String[] { "蘋果", "西瓜", "水蜜桃" };  
            private boolean chData[] = new boolean[] { true, true, false };  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                    this.mych = (TextView) super.findViewById(R.id.mych) ;        // 取得文本  
                    this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            Dialog dialog = new AlertDialog.Builder(MyDialogDemo.this)  
                                    .setIcon(R.drawable.pic_m)  
                                    .setTitle("請選擇你喜歡吃的水果?")  
                                    .setPositiveButton("確定", new DialogInterface.OnClickListener() {  

                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  
                                            }  
                                    })  
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
                                            @Override  
                                            public void onClick(DialogInterface dialog, int which) {  

                                            }  
                                                            })  
                                            .setMultiChoiceItems(MyDialogDemo.this.fruitData,  
                                                            MyDialogDemo.this.chData,  
                                                            new DialogInterface.OnMultiChoiceClickListener() {  
                                                                    @Override  
                                                                    public void onClick(DialogInterface dialog,  
                                                                                    int which, boolean isChecked) {  
                                                                            for (int x = 0; x < MyDialogDemo.this.fruitData.length; x++) {  
                                                                                    if(x == which && isChecked) {        // 當前選項被選中  
                                                                                            MyDialogDemo.this.mych  
                                                                                                            .append(MyDialogDemo.this.fruitData[x]  
                                                                                                                            + "、");  
                                                                                    }  
                                                                            }  
                                                                    }  
                                                            }).create();  
                            dialog.show() ;  
                    }  

            }  
    }  

(7)進度對話框

    public class MyDialogDemo extends Activity {  
            private Button mybut = null ;        // 定義按鈕  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                    this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            final ProgressDialog proDia = ProgressDialog.show(MyDialogDemo.this,  
                                            "搜索網絡", "請耐心等待...");  
                            new Thread(){  
                                    public void run(){        // 線程的主體類  
                                            try {  
                                                    Thread.sleep(3000) ;        // 運行三秒  
                                            } catch (Exception e) {  
                                            } finally {  
                                                    proDia.dismiss() ;        // 關閉對話框  
                                            }  
                                    }  
                            }.start() ;  
                            proDia.show() ;        // 顯示對話框  
                    }  

            }  
    }  

(8)水平進度條

    public class MyDialogDemo extends Activity {  
            private Button mybut = null ;        // 定義按鈕  
            private static final int MAX_PROGRESS = 100 ;        // 最大值  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                    super.onCreate(savedInstanceState);  
                    super.setContentView(R.layout.main); // 調用布局管理器  
                    this.mybut = (Button) super.findViewById(R.id.mybut) ;        // 取得按鈕  
                    this.mybut.setOnClickListener(new OnClickListenerImpl()) ;        // 設置事件類  
            }  
            private class OnClickListenerImpl implements OnClickListener {  
                    @Override  
                    public void onClick(View view) {  
                            final ProgressDialog proDia = new ProgressDialog(MyDialogDemo.this) ;  
                            proDia.setTitle("搜索網絡") ;  
                            proDia.setMessage("請耐心等待") ;  
                            proDia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL) ;        // 水平進度條  
                            proDia.setMax(MAX_PROGRESS) ;        // 設置進度的最大值  
                            proDia.setProgress(30) ;        // 從進度30開始  
                            proDia.setButton("後台處理", new DialogInterface.OnClickListener() {  
                                    @Override  
                                    public void onClick(DialogInterface dialog, int which) {  
                                            proDia.dismiss() ;        // 關閉對話框  
                                    }  
                            }) ;  
                            proDia.setButton2("詳細信息", new DialogInterface.OnClickListener() {  
                                    @Override  
                                    public void onClick(DialogInterface dialog, int which) {  

                                    }  
                            }) ;  
                            proDia.onStart() ;        // 啟動進度  
                            new Thread(){  
                                    public void run(){        // 線程的主體類  
                                            for (int x = 0; x < MAX_PROGRESS; x++) {  
                                                    try {  
                                                            Thread.sleep(500); // 運行三秒  
                                                    } catch (Exception e) {  
                                                    }  
                                                    proDia.incrementProgressBy(1) ;  
                                            }  
                                            proDia.dismiss() ;  
                                    }  
                            }.start() ;  
                            proDia.show() ;        // 顯示對話框  
                    }  

            }  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved