一、国际化
在res下创建不同国家语言环境集目录。例:中国:values-zh 英语:values-en
二、两种上下文的区别
1.this:最终继承Context 理解为子类
2.getApplicationContext():返回的是Context对象 父类
3.对话框只能用this,其他都可以
三、常见对话框
1.Toast
2.对话框:普通对话框、单选对话框、多选对话框。进度条对话框
1)普通对话框
//点击按钮弹出一个普通对话框
public void click(View v){
//通过builder构建器来实现
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("警告");
builder.setMessage("世界上最遥远的距离就是没有网");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.out.println("点击了确定按钮");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
System.out.println("点击了取消按钮");
}
});
//最后一步,一定要记得 和Toast一样 show()出来
builder.show();
}
2)单选对话框
//点击按钮弹出一个单选对话框
public void click2(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择您喜欢的课程");
final String items[] = {"语文","数学","英语","java","ios","Android","C","C++","C#"};
//-1代表没有条目被选中
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//点中哪个条目就把哪个条目的数据取出来
String classs = items[i];
Toast.makeText(MainActivity.this,classs,Toast.LENGTH_SHORT).show();
//关闭对话框
dialogInterface.dismiss();
}
});
builder.show();
}
3)多选对话框
//点击按钮弹出一个多选对话框
public void click3(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择您喜欢的课程");
final String items[] = {"语文","数学","英语","java","ios","Android","C","C++","C#"};
final boolean checkedItems[] = {false,false,false,false,false,false,false,false,false};
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
}
});
//添加一个确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
StringBuffer sb = new StringBuffer();
for(int j = 0;j<items.length;j++){
if(checkedItems[j]){
String kc = items[j];
sb.append(kc+" ");
}
}
Toast.makeText(MainActivity.this,sb.toString(),Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
4)进度条对话框
//点击按钮弹出一个进度条对话框
public void click4(View v){
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("正在玩命加载中");
//设置一下进度条样式
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//创建一个子线程 与进度相关的可以在子线程直接更新ui
new Thread(){
@Override
public void run() {
//设置进度条最大值
dialog.setMax(100);
for (int i = 0;i<100;i++){
//设置当前进度
dialog.setProgress(i);
//睡眠50ms,与Thread.sleep()比,不需要处理异常
SystemClock.sleep(50);
}
//关闭对话框
dialog.dismiss();
}
}.start();
//一定记得show()出来
dialog.show();
}
四、Android中的动画
1.帧动画
加载一系列图片资源
1)res下drawable下键一个animation-list
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/ic_launcher_foreground" android:duration="200"/>
<item android:drawable="@drawable/ic_launcher_foreground" android:duration="200"/>
<item android:drawable="@drawable/ic_launcher_foreground" android:duration="200"/>
</animation-list>
2)将图片资源放入drawable下
3)布局中定义一个ImageView空间用来显示动画效果
4)在MainActivity中实现
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//【1】找到控件来显示动画效果
final ImageView iv = findViewById(R.id.iv);
//【2】设置背景资源
iv.setBackgroundResource(R.drawable.my_anim);
//【2.1】兼容低版本的写法
new Thread(){
@RequiresApi(api = 28)
@Override
public void run() {
SystemClock.sleep(20);
//【3】获取AnimationDrawable类型
AnimatedImageDrawable rocketAnimation = (AnimatedImageDrawable) iv.getBackground();
//【4】开启动画
rocketAnimation.start();
}
}.start();
}
2.View动画/补间动画
3.属性动画