您的位置:首页 > 其它

一些杂乱的知识点(一)

2017-04-27 08:09 567 查看

一些杂乱的知识点(一)

一些杂乱的知识点一

Android下配置环境变量类似于电脑上的cmd命令

ListView

LinearLayout布局

Android使用图片

常见包名

单位

工具类

耗时操作

线程

Json数据解析

手机访问电脑上的服务器中的内容

SmartImageView

自定义控件

网络

小技巧

发送短信

样式和主题 style和Theme
1 共同点

2 不同点

3使用

国际化 i18n

2种上下文的区别

对话框
1 普通对话框用的比较多

2 单选对话框用的少

3 多选对话框用的少

4 进度条对话框

Android动画
1 属性动画

1 补间动画

1 帧动画

进程概念介绍
1 Foreground process 前台进程

2 Visible process 可视进程

3 Service process 服务进程

4 Background process 后台进程

5 Empty process 空进程

获取SD卡路径

引进类库

判断横竖屏

1.Android下配置环境变量(类似于电脑上的cmd命令)

需要把执行的文件放在system/xbin目录下,比如把sqlite3放在这下面,在
adb shell下面,直接输入sqlite3直接可以运行.adb shell下面输入su可以提高到root权限也是这个道理.


2.ListView

1.在公司,一般使用BaseAdapter.用一个类去继承这个类.
2.能用fill_parent尽量用fill_parent,用wrap_content的话,它不知道
到底多少个item才能填满屏幕的高度,所以如果当前的getcount返回的个数
不够占满屏幕的高度的话,它会一直调用getview方法去不断地尝试去
填满,getview方法会被调用很多次,效率降低.当使用fill_parent的时候
,它一开始就知道需要多少个item才能填满屏幕,所以不会去多调用getview方法.
3.创建xml布局时,命名一般是  "item_功能_layout".在布局里面,一个ImageView控件的命名一般是  "item_img_功能"  ,可以设置一张默认图片.
4.优化:public View getView(int position, View convertView, ViewGroup parent) {
//1.获取position位置条目对应的list集合中的新闻,Bean对象
NewsBean newsBean = list.get(position);

View view = null;

ViewHolder viewHolder = null;   //用来缓存view上的数据

//2.复用convertView优化listview,创建一个view作为getview的返回值用来显示一个条目
if(convertView != null){
view = convertView;
viewHolder = (ViewHolder) view.getTag();   //将之前缓存的数据  恢复
} else {
//加载布局
view = View.inflate(context, R.layout.item_news_layout, null);
viewHolder = new ViewHolder();

//3.获取view上的子控件   存到  viewHolder里面
viewHolder.item_img_icon = (ImageView)view.findViewById(R.id.item_img_icon);
viewHolder.item_tv_title = (TextView)view.findViewById(R.id.item_tv_title);
viewHolder.item_tv_des = (TextView)view.findViewById(R.id.item_tv_des);

view.setTag(viewHolder);   //将这个内部类(缓存数据的类)存到view里面

}
//4.将数据设置给这些子控件显示
//view子控件的view对象在ViewHolder里面,直接可以设置里面的数据,就等于在设置view里面的子控件的数据
viewHolder.item_img_icon.setImageDrawable(newsBean.news_icon);
viewHolder.item_tv_title.setText(newsBean.title);
viewHolder.item_tv_des.setText(newsBean.des);

return view;
}

class ViewHolder{
ImageView item_img_icon;
TextView item_tv_title;
TextView item_tv_des;
}


3.LinearLayout布局

1.在使用到weight属性时,如果是vertical布局,则需要把height设置成
0dp,如果是horizontal,则需要把width设置成0dp.
2.gravity:子控件相对于自己居中
layout_gravity:自己相对于父窗体居中
3.android:scaleType="fitXY"拉伸图片,使之占满


4.Android使用图片

1.Bitmap     setImageBitmap()
2.Drawable   setImageDrawable()
context.getResources().getDrawable(R.drawable.icon2);


5.常见包名

1.bean   model  一个模型
2.util   工具类
3.adapter 适配器的包
5.dao   db  操作数据库的包


6.单位

1.dp  一般的长度单位就用这个
2.sp  字体的大小用这个


7.工具类

1.TextUtils.isEmpty(urlString)   可以判断字符串是否为空


8.耗时操作

1.android耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中进行.
2.安卓4.0之后的网络操作强制在子线程中进行.因为网络访问是耗时的操作,可能导致ANR(application not response 应用无响应);


9.线程

1.子线程不能更新UI(某些情况下可以)
2.Toast也算是更新UI,所以不能放在子线程中
3.子线程可以通过handler或者java回调机制发送数据给主线程.其中用
handler方式的时候,Message对象的what可以用来区分是哪个Message对象发送过来的数据.


10.Json数据解析

1.用{}包含的是JsonObject
2.用[]包含的是JsonArray


11.手机访问电脑上的服务器中的内容

1.需要配置局域网,然后让手机连接服务器的地址,且是以ip地址开头,不是以电脑用户名开头.


12.SmartImageView

Android中加载网络图片的ImageView,功能强大,代码简单.
自定义控件的使用时,xml文件中必须写完整路径,比如这里需要写com.loopj.android.image.SmartImageView


13.自定义控件

1.所有的自定义控件,必须实现它的所有的构造方法


14.网络

1.需要开一个子线程去请求网络,一般线程是写到封装这个请求网络的方法里面.  如果需要返回值,则可以使用Handler,或者java的回调机制.
2.判断下载完成:如果一个文件的md5正确了,就下载完成了.


15.小技巧

1.当不知道一个实现的那个方法里面的参数是什么意思时(看api没看懂),
可以在里面加一个Syso输出语句,然后在这一行打一个断点,debug一下,查看函数的参数分别是什么,即可知道参数的意思.


16.发送短信

1.// 获取SmsManager实例
SmsManager smsManager = SmsManager.getDefault();
// 如果短信内容过多 发不出去 分条发送
ArrayList<String> divideMessage = smsManager.divideMessage(content);
for (String string : divideMessage) {
// 发送短信数据
smsManager.sendTextMessage(number, null, string, null, null);
}

2.权限:<uses-permission android:name="android.permission.SEND_SMS"/>


17.样式和主题 style和Theme

17.1 共同点

定义的方式是一样的


17.2 不同点

1.style的作用范围比较窄(控件 button,textview), theme 作用在
activity或者Application节点下.


17.3使用

1.res->values->xxxx.xml   用styles.xml文件或者自己定义的文件来写都行
<style name="my_style">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ff0000</item>
<item name="android:textSize">25sp</item>
</style>

<style name="my_theme">
<item name="android:animateOnClick">true</item>
<item name="android:background">#aa0243</item>
</style>


18. 国际化 i18n

国际化就是在res下创建对应国家环境目录,然后更改strings.xml中的值.
然后在运行程序的时候,它会自动的检测当前的系统语言环境去找对应的文件夹下的strings.xml资源.如果不知道那个国家的简写,可以打开IE浏览器,设置->语言,可以看到所有国家的简写.
values-en  英文
values-zh  中文


19. 2种上下文的区别

MainActivity.this   是Context的子类
getApplicationContext() 直接返回Context
对话框不能用getApplicationContext()


20. 对话框

20.1 普通对话框(用的比较多)

// 构建AlertDialog
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("警告");
builder.setMessage("世界上最遥远的距离是没有网络");
builder.setPositiveButton("确定", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

System.out.println("点击了确定按钮 执行的逻辑");

}
});
builder.setNegativeButton("取消", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

System.out.println("点击了取消按钮");
}
});
// 最后一步一定要记得 show出来
builder.show();


20.2 单选对话框(用的少)

builder.setSingleChoiceItems


20.3 多选对话框(用的少)

builder.setMultiChoiceItems


20.4 进度条对话框

//1.创建一个ProgressDialog对象      与Progress相关的可以在子线程更新UI
final ProgressDialog progressDialog = new ProgressDialog(mContext);
//2.设置标题
progressDialog.setTitle("玩命儿加载ing");

//3.设置风格,默认的风格是转圈儿     现在设置成水平
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
new Thread(){
public void run() {
for (int i = 0; i <= 100; i++) {
SystemClock.sleep(50);   //睡眠50毫秒
progressDialog.setProgress(i);    //设置进度条的进度
}

//关闭对话框
progressDialog.dismiss();
};
}.start();    //开启线程
//4.最后记得show
progressDialog.show();


21. Android动画

21.1 属性动画

21.1 补间动画

21.1 帧动画

就是加载一系列的图片资源,照着官方api来弄就行api guides->animation and graphics->drawable animation


22. 进程概念介绍

Android四大组件都是运行在主线程

Android中的服务,也是在后台运行 没有界面

首先杀死等级低的进程(下面的进程等级由高到低)

22.1 Foreground process 前台进程

用户正在交互,可以理解成   相当于Activity的onResume()方法


22.2 Visible process 可视进程

用户没有在交互,但用户还一直能看得见页面,相当于Activity执行了onPause()方法


22.3 Service process 服务进程

通过startService()开启了一个服务


22.4 Background process 后台进程

当前用户看不见页面,相当于Activity执行了onStop()方法


22.5 Empty process 空进程

23. 获取SD卡路径

获取内置SD卡路径
Environment.getExternalStorageDirectory().getPath();


获取外置SD卡路径

public List<String> getExtSDCardPath()
{
List<String> lResult = new ArrayList<String>();
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
if (line.contains("extSdCard"))
{
String [] arr = line.split(" ");
String path = arr[1];
File file = new File(path);
if (file.isDirectory())
{
lResult.add(path);
}
}
}
isr.close();
} catch (Exception e) {
}
return lResult;
}


24. 引进类库

比如视频播放开源项目vitamio,是一个类库,那是个Android不能允许的项目,里面有很多源码.当需要在自己的项目中引进时,先把vitamio导入到workspace,需要右键自己的项目属性Android->add library

25. 判断横竖屏

获取屏幕高度,宽度,如果高度>宽度则是竖屏,否则相反.

// 1. 获取手机的宽和高
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Point outSize = new Point();
wm.getDefaultDisplay().getSize(outSize);
int width = outSize.x; // 宽
int height = outSize.y; // 高
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: