android 学习随笔十九(对话框、样式、主题、国际化 )
1、对话框
1 package com.itheima.dialog; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.app.AlertDialog; 6 import android.app.AlertDialog.Builder; 7 import android.app.ProgressDialog; 8 import android.content.DialogInterface; 9 import android.content.DialogInterface.OnClickListener; 10 import android.content.DialogInterface.OnMultiChoiceClickListener; 11 import android.view.Menu; 12 import android.view.View; 13 import android.widget.Toast; 14 15 public class MainActivity extends Activity { 16 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 } 22 23 24 public void click1(View v){ 25 //创建对话框创建器 26 AlertDialog.Builder builder = new Builder(this); 27 //设置图标 28 builder.setIcon(android.R.drawable.ic_dialog_alert); 29 //设置标题 30 builder.setTitle("警告"); 31 //设置内容 32 builder.setMessage("欲练此功必先自宫,春晓你确定要自宫吗"); 33 34 //设置确定按钮 35 builder.setPositiveButton("确定", new OnClickListener() { 36 37 @Override 38 public void onClick(DialogInterface dialog, int which) { 39 Toast.makeText(MainActivity.this, "自宫完成,谢谢使用", 0).show(); 40 41 } 42 }); 43 //设置取消按钮 44 builder.setNegativeButton("取消", new OnClickListener() { 45 46 @Override 47 public void onClick(DialogInterface dialog, int which) { 48 Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show(); 49 50 } 51 }); 52 53 //显示对话框 54 AlertDialog ad = builder.create(); 55 ad.show(); 56 } 57 58 public void click2(View v){ 59 //创建对话框创建器 60 AlertDialog.Builder builder = new Builder(this); 61 //设置图标 62 builder.setIcon(android.R.drawable.ic_dialog_alert); 63 //设置标题 64 builder.setTitle("选择您的家乡"); 65 66 final String[] items = new String[]{ 67 "火星", 68 "塞伯坦", 69 "氪星", 70 "M78星云", 71 }; 72 73 //设置单选选项 74 builder.setSingleChoiceItems(items, 1, new OnClickListener() { 75 76 //dialog:触发此方法执行的那个对话框 77 @Override 78 public void onClick(DialogInterface dialog, int which) { 79 Toast.makeText(MainActivity.this, items[which], 0).show(); 80 //对话框消失 81 dialog.dismiss(); 82 83 } 84 }); 85 86 //显示对话框 87 builder.show(); 88 } 89 90 public void click3(View v){ 91 //创建对话框创建器 92 AlertDialog.Builder builder = new Builder(this); 93 //设置图标 94 builder.setIcon(android.R.drawable.ic_dialog_alert); 95 //设置标题 96 builder.setTitle("选择您需要的武器"); 97 98 final String[] items = new String[]{ 99 "板凳", 100 "啤酒瓶", 101 "开山刀", 102 "AK-47", 103 "爱国者", 104 "唐晓平" 105 }; 106 107 final boolean[] checkedItems = new boolean[]{ 108 true, 109 false, 110 false, 111 false, 112 false, 113 true 114 }; 115 116 //设置多选选项 117 builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() { 118 119 @Override 120 public void onClick(DialogInterface dialog, int which, boolean isChecked) { 121 //记录用户的选择 122 checkedItems[which] = isChecked; 123 } 124 }); 125 builder.setPositiveButton("确定", new OnClickListener() { 126 127 @Override 128 public void onClick(DialogInterface dialog, int which) { 129 String text = ""; 130 for (int i = 0; i < checkedItems.length; i++) { 131 text += checkedItems[i]? items[i] + ",": ""; 132 } 133 Toast.makeText(MainActivity.this, text, 0).show(); 134 135 } 136 }); 137 138 builder.show(); 139 } 140 141 public void click4(View v){ 142 //创建进度条对话框 143 final ProgressDialog dialog = new ProgressDialog(this); 144 dialog.setIcon(android.R.drawable.ic_input_add); 145 dialog.setTitle("正在自宫中,请稍候..."); 146 dialog.setMax(100); 147 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 148 Thread t = new Thread(){ 149 public void run() { 150 for (int i = 0; i <= 100; i++) { 151 dialog.setProgress(i); 152 try { 153 sleep(20); 154 } catch (InterruptedException e) { 155 // TODO Auto-generated catch block 156 e.printStackTrace(); 157 } 158 } 159 //自宫完成,进度消失 160 dialog.dismiss(); 161 } 162 }; 163 t.start(); 164 dialog.show(); 165 } 166 }
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context=".MainActivity" 10 android:orientation="vertical" 11 > 12 13 <Button 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:text="确定取消对话框" 17 android:onClick="click1" 18 /> 19 <Button 20 android:layout_width="wrap_content" 21 android:layout_height="wrap_content" 22 android:text="单选对话框" 23 android:onClick="click2" 24 /> 25 <Button 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:text="多选对话框" 29 android:onClick="click3" 30 /> 31 <Button 32 android:layout_width="wrap_content" 33 android:layout_height="wrap_content" 34 android:text="进度条对话框" 35 android:onClick="click4" 36 /> 37 38 </LinearLayout>
2、样式和主题
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context=".MainActivity" 10 android:orientation="vertical" 11 > 12 13 <TextView 14 android:text="@string/hello_world" 15 style="@style/lakesouthstyle" 16 /> 17 <TextView 18 android:text="@string/hello_world" 19 style="@style/chunxiaostyle" 20 /> 21 <TextView 22 android:text="@string/hello_world" 23 style="@style/lakesouthstyle.miaorunstyle" 24 /> 25 <TextView 26 android:text="@string/hello_world" 27 style="@style/lakesouthstyle" 28 /> 29 30 </LinearLayout>
在values目录下定义样式,主题和样式定义相同,主题应用在清单文件中(主题用于Activity),样式应用在布局文件中
1 <resources xmlns:android="http://schemas.android.com/apk/res/android"> 2 3 <!-- 4 Base application theme, dependent on API level. This theme is replaced 5 by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 6 --> 7 <style name="AppBaseTheme" parent="android:Theme.Light"> 8 <!-- 9 Theme customizations available in newer API levels can go in 10 res/values-vXX/styles.xml, while customizations related to 11 backward-compatibility can go here. 12 --> 13 </style> 14 15 <!-- Application theme. --> 16 <style name="AppTheme" parent="AppBaseTheme"> 17 <!-- All customizations that are NOT specific to a particular API-level can go here. --> 18 <item name="android:background">#ff0000</item> 19 </style> 20 21 <style name="lakesouthstyle"> 22 <item name="android:layout_width">wrap_content</item> 23 <item name="android:layout_height">wrap_content</item> 24 <item name="android:textSize">30sp</item> 25 <item name="android:textColor">#00ff00</item> 26 </style> 27 <style name="chunxiaostyle" parent="lakesouthstyle"> 28 <item name="android:textSize">20sp</item> 29 </style> 30 <style name="lakesouthstyle.miaorunstyle"> 31 <item name="android:textColor">#ff0000</item> 32 </style> 33 34 </resources>
3、国际化
根据语言需求定义values,values_zh,values_it,drawable-en-rUS(找出国家语言简写)等定义资源。
文本国际化
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 4 <string name="app_name">11_国际化</string> 5 <string name="action_settings">Settings</string> 6 <string name="hello_world">这是英文的你好世界</string> 7 8 </resources>
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 4 <string name="app_name">11_国际化</string> 5 <string name="action_settings">Settings</string> 6 <string name="hello_world">这是中文的你好世界</string> 7 8 </resources>
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 4 <string name="app_name">11_国际化</string> 5 <string name="action_settings">Settings</string> 6 <string name="hello_world">这是意大利文的你好世界</string> 7 8 </resources>
图片也可以国际化,定义drawable-en-rGB、drawable-en-rUS等