【0048】Android基礎-35-Android中樣式和主題-國際化-對話框

【1】style  Theme 

   共同點:(1)定義的方式是同樣的 
   不一樣點:(1)style做用範圍比較窄 (控件 button textview)  theme 做用在activity或者Application節點下

【1.1】定義一個樣式

【1.2】定義一個主題

【1.3】【bug】

10-31 00:59:44.550: E/AndroidRuntime(3994): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

 

【解決辦法】php

解決步驟以下:
1、res/styles.xml文件中從新添加一個style樣式AppTheme.Base,而後將AppTheme繼承自AppTheme.Base,代碼以下:
[html] view plain copy
<resources>  
  
    <!-- Base application theme. -->  
    <style name="AppTheme" parent="AppTheme.Base">  
        <!-- Customize your theme here. -->  
  
    </style>  
    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">  
        <item name="colorPrimary">@color/colorPrimary</item>  
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>  
        <item name="colorAccent">@color/colorAccent</item>  
        <item name="android:windowBackground">@android:color/white</item>  
    </style>  
</resources>  

2、在res文件中建立values-v21文件夾,而後在此文件夾下建立styles.xml文件,代碼以下:
[html] view plain copy
<?xml version="1.0" encoding="utf-8"?>  
<resources>  
  
    <style name="AppTheme" parent="AppTheme.Base">  
        <item name="android:colorPrimary">@color/colorPrimary</item>  
        <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>  
        <item name="android:colorAccent">@color/colorAccent</item>  
    </style>  
</resources>  
說明:values-v21文件夾中的內容是專門針對API21以上的版本所使用的配置文件,也就是說若是是API21以前的文件就是使用res/values中的styles.xml,不然使用values-v21文件夾下的styles.xml

經過以上兩步,就能夠輕鬆實現MainActivity仍是繼承自AppCompatActivity,也就是說能夠將Material Design的效果運行在API21以前版本的手機上,而且API21以前的樣式和API21之後的樣式能夠由咱們本身決定

 

 

【2】Android中的國際化:在公司中寫代碼必定要標準化,國際化是要作的工做;

下面的寫中文報警告,硬編碼要改成軟編碼,在公司中這是須要作的工做;html

【1】首先要新建文件夾,注意文件夾的名稱要寫對,中文對應的就是value-zh(中間是中劃線),java

【2】而後複製一個string.xml文件,將其中的中文(或者別的語言)對應的標識改成對應國家的文字;android

【3】若是新建文件的文件名能夠參考IE中的命名;ios

【4】當設備系統中的語言設置改成對應國家的語言時,該程序對應的國際化就會生效變爲對應系統設置的國家的語言;網絡

【3】對話框

(1)普通對話框app

(2)單選對話框ide

 (3)多選對話框動畫

 (4)進度條對話框ui

【3.1】普通對話框

‘【出現的錯誤】

【錯誤緣由】-上下文傳遞的不對,應該傳遞子類的上下文,即this;

【源碼】

 1 // 點擊按鈕 彈出一個普通對話框
 2     public void click1(View v) {
 3 
 4         // 構建AlertDialog
 5         AlertDialog.Builder builder = new Builder(this);
 6         builder.setTitle("警告");
 7         builder.setMessage("世界上最遙遠的距離是沒有網絡");
 8         builder.setPositiveButton("肯定", new OnClickListener() {
 9 
10             @Override
11             public void onClick(DialogInterface dialog, int which) {
12 
13                 System.out.println("點擊了肯定按鈕 執行的邏輯");
14 
15             }
16         });
17         builder.setNegativeButton("取消", new OnClickListener() {
18 
19             @Override
20             public void onClick(DialogInterface dialog, int which) {
21 
22                 System.out.println("點擊了取消按鈕");
23             }
24         });
25         // 最後一步必定要記得 show出來
26         builder.show();
27 
28     }

【3.2】單選對話框

 

 【注】內部類要訪問外部的局部的變量須要將外部的變量改成final;

【源碼】

 1 // 點擊按鈕 彈出一個單選對話框
 2     public void click2(View v) {
 3 
 4         // 構建AlertDialog
 5         AlertDialog.Builder builder = new Builder(this);
 6         builder.setTitle("請選擇您喜歡的課");
 7         final String items[] = { "Android", "ios", "php", "c", "C++", "html" };
 8         builder.setSingleChoiceItems(items, -1, new OnClickListener() {
 9 
10             @Override
11             public void onClick(DialogInterface dialog, int which) {
12 
13                 // 取出點中的條目
14                 String item = items[which];
15                 Toast.makeText(getApplicationContext(), item, 1).show();
16                 // 關閉當前對話框
17                 dialog.dismiss();
18             }
19         });
20 
21         // 最後一步必定要記得 show出來
22         builder.show();
23 
24     }

 

【3.3】多選對話框

【源碼】

 1     // 點擊按鈕 彈出一個多選對話框
 2     public void click3(View v) {
 3         // 構建AlertDialog
 4         AlertDialog.Builder builder = new Builder(this);
 5         builder.setTitle("請選擇您喜歡吃的水果");
 6         final String items[] = { "榴蓮", "蘋果", "葡萄", "香蕉", "黃瓜", "火龍果", "荔枝" };
 7         final boolean[] checkedItems = { true, false, false, false, false,
 8                 false, true };
 9         builder.setMultiChoiceItems(items, checkedItems,
10                 new OnMultiChoiceClickListener() {
11 
12                     @Override
13                     public void onClick(DialogInterface dialog, int which,
14                             boolean isChecked) {
15 
16                     }
17                 });
18         builder.setPositiveButton("肯定", new OnClickListener() {
19 
20             @Override
21             public void onClick(DialogInterface dialog, int which) {
22 
23                 StringBuffer sb = new StringBuffer();
24                 // [1]把你選中的水果給取出來
25                 for (int i = 0; i < checkedItems.length; i++) {
26                     if (checkedItems[i]) {
27                         // 就證實是選中的
28                         String fruit = items[i];
29                         sb.append(fruit + " ");
30 
31                     }
32 
33                 }
34 
35                 Toast.makeText(getApplicationContext(), sb.toString(), 1)
36                         .show();
37                 // 關閉對話框
38                 dialog.dismiss();
39 
40             }
41         });
42 
43         // 最後一步必定要記得 show出來
44         builder.show();
45 
46     }

 

【3.4】進度條對話框

【默認樣式】

【水平樣式】

【源碼】

 1 //進度條對話框
 2     public void click4(View v) {
 3 
 4         //與進度相關的控件均可以直接在子線程更新ui 
 5         final ProgressDialog dialog = new ProgressDialog(this);
 6         dialog.setTitle("正在玩命加載ing");
 7         dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 8         dialog.show();
 9         //設置進度條的最大值 
10         dialog.setMax(100);
11         new Thread(){public void run() {
12             for (int i = 0; i <= 100; i++) {
13                 //設置當前的進度 
14                 
15                 SystemClock.sleep(50);//睡眠50毫秒
16                 dialog.setProgress(i);
17             }
18             //關閉對話框
19             dialog.dismiss();
20             
21             
22         };}.start();
23         
24         
25     }
26 
27 }

【4】兩種上下文的區別

補充 2種上下文的區別

this:MainActivity 子類 

getApplicationContext(): 返回Context 父類

MainActivity是Context 的子類;

對話框不能用getApplicationContext();其餘的地方兩種上下文都是可使用的;

通常寫this來指代上下文是必定沒有問題的;

緣由:子類的具備的屬性在父類中不具有;

【5】幀動畫 

【第一步】建立文件夾

 

【第二步】建立xml文件

 

【第三步】

 

【第四步】播放次數的設置是否爲單次或者屢次

true:屢次播放;false:單次播放;

相關文章
相關標籤/搜索