01-进度条(ProgressBar)的概述,属性,常用方法
//在开发时,当需要下载或上传文件时,需要让用户知道当前的进度,就需要使用进度条
//xml中使用
//减少或增加进度,值为整数就是增加,负数就是减少
pb_show.incrementProgressBy(-5);//第一进度
pb_show.incrementSecondaryProgressBy(-3);//第二进度
02-拖动条(SeekBar)的概述,属性,常用方法
//在开发过程中,音量及音视频播放的时候,
//需要快速定位到某个地方,这时候可以使用拖动条来实现
//xml中定义拖动条来使用
//拖动SeekBar,进行监听,调整当前位置
//为seekBar设置监听事件
sb_id.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//停止拖动
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e("--Main--", "--------停止拖动-------");
}
19
//开始拖动
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.e("--Main--", "--------开始拖动-------");
}
//拖动中
@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
Log.e("--Main--", "--------拖动中:progress="+progress);
iv_head.setAlpha(progress);//修改图片的透明度
tv_show.setText(String.valueOf(progress));//修改文本显示的内容
}
});
03-AlertDialog作用以及使用场景,不同样式的对话框创建显示(两个案例 基本 和 自定义)
1.普通对话框:
//在做删除修改退出等时,需要提示用户就需要用到提示框
//AlertDialog弹出对话框就是完成这项功能的
// A:弹出普通对话框
// 1.创建一个AlertDialog.Builder对象
new AlertDialog.Builder(this)
// 2.给Builder对象设置标题,图标等
.setIcon(R.drawable.f).setTitle("普通对话框ssss")
// 3.给Builder对象设置信息
.setMessage("大家好帅吗?sssss")
// 4.设置确定,取消按钮
.setPositiveButton("帅ssss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择帅sss", Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("不帅sss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择不帅sss", Toast.LENGTH_SHORT).show();
}
})
// 5.显示对话框
.show();
2.自定义视图的对话框
//创建线性布局
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);//设置布局走向为垂直
//创建输入框对象
final EditText et_name = new EditText(this);
et_name.setHint("请输入用户名");
final EditText et_psw = new EditText(this);
et_psw.setHint("请输入密码");
Button button = new Button(this);
button.setText("哈哈");
button.setLayoutParams(new ViewGroup.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
//将输入框添加到线性布局中
ll.addView(et_name);
ll.addView(et_psw);
ll.addView(button);
//1.创建一个AlertDialog.Builder对象
new AlertDialog.Builder(this)
//2.给Builder对象设置图标,标题
.setIcon(R.drawable.ic_launcher)
.setTitle("自定义对话框")
//3.给Builder对象设置自定义内容
.setView(ll)//将自定义视图设置到对话框中
//4.设置确定和取消按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 获取输入框中的内容
String name = et_name.getText().toString();
String psw = et_psw.getText().toString();
Toast.makeText(MainActivity.this, "输入框的内容是:用户名:"+
name+",密码:"+psw, Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", null)
//5.显示对话框
.show();
04-通过java代码实现UI效果(最基础的)
//创建线性布局
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);//设置布局走向为垂直
//创建输入框对象
final EditText et_name = new EditText(this);
et_name.setHint("请输入用户名");
final EditText et_psw = new EditText(this);
et_psw.setHint("请输入密码");
05-资源命名规范,以及应用资源的统一整理(尺寸适配和图片适配的命名)
dpi范围密度对应范围
dpi 密度
0dpi ~ 120dpi ldpi
120dpi ~ 160dpi mdpi
160dpi ~ 240dpi hdpi
240dpi ~ 320dpi xhdpi
320dpi ~ 480dpi xxhdpi
480dpi ~ 640dpi xxxhdpi
对于每种密度下的icon应该设计成什么尺寸其实Android也是给出了最佳建议
mipmap-mdpi 48 * 48(博主实测图标16就够了)
mipmap-hdpi 72 * 72(博主实测图标32就够了)
mipmap-xhdpi 96 * 96(博主实测图标48就够了)
mipmap-xxhdpi 144 * 144(博主实测图标64就够了)
mipmap-xxxhdpi 192 * 192(博主实测图标72就够了)
06-shape自定义图片
使用自定义shap步骤:
1.在res下创建drawable目录
2.在drawable目录下创建一个根标签为shape的xml文件
3.去指定shape的形状及填充颜色等
4.在布局资源中使用backgroud属性来引入使用该图形xml
//椭圆(圆)
//渐变色
//矩形
//圆角
//填充颜色
//环形
//选择器
07-style样式资源和theme主题资源的使用
//在styles.xml中定义自定义主题
//java代码中为某个Activity设置该主题
// Java代码实现:使用自定义的主题,在onCreate方法的setContentView方法之前使用
setTheme(R.style.MyAppTheme);
setContentView(R.layout.activity_theme);
//xml中使用自定义主题
//在application标签下指定android:theme="@style/MyAppTheme" 主题,
//整个应用都使用该主题
//在activity标签下指定android:theme="@style/MyAppTheme" 主题,
//只有该Activity有该主题
08-style设置TextView 的宽高、字体大小及颜色、背景;theme的应用样式
09-raw与assets中资源的区别
/*在建立项目中一般会默认建立assets文件,
当然我们还可以在res文件下面建立raw文件夹,
这里面都可以存放一些图片,音频或者文本信息,
可以供我们在程序当中进行使用,不过他们两个也有不同点;
assets下面的文件不会被编译,通过路径可以去访问其中的内容。
raw中文件会自动编译,我们可以在R.java文件中找到对应的ID,
* Raw目录和Assets目录的区别
* 1.Raw目录下的文件可以映射到R文件中,Assets目录不可以
* 2.Raw目录下文件通过Resources类来获取,
Assets目录下的文件通过AssetsManager类来获取
* 3.Raw目录下不可以再创建文件夹,Assets目录可以
* 4.Raw目录和Assets目录都是原生资源,在Apk打包时不会编译成二进制文件。
*/
//1.获取AssetsManager对象
// 1.获取AssetsManager对象
AssetManager assetManager = getAssets();
try {
// 2.通过AssetsManager对象的open来获取文件名对应的输入流
InputStream is = assetManager.open("aa/test2.txt");
// 3.将流转为字符串
BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
// 将读取到的内容吐司出来
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
// 1.获取raw目录下的文件,需要用到资源管理类
Resources resources = getResources();
// 2.通过Resources对象的openRawResource(R.raw.test) 获取到指定的文件对应的流
InputStream is = resources.openRawResource(R.raw.test);
// 3.将流转为字符串
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
// 将读取到的内容吐司出来
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}