【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:单次播放;

相关文章
相关标签/搜索