Android
来源:互联网 发布:成交量指标公式源码 编辑:程序博客网 时间:2024/06/07 23:09
1.android:layout_weight的用法
1.android:layout_weight:权重比例,将剩余空间按比例分配。只可在线性布局中使用2.指定android:layout_weight属性后, 如果线性布局是水平的,View的宽度=原有宽度+线性布局剩余空间的占比 如果线性布局是竖直的,View的高度=原有高度+线性布局剩余空间的占比3.Android官方推荐,在使用android:layout_weight时, 如果线性布局是水平的,要将android:layout_width设置为0dp 如果线性布局是竖直的,要将android:layout_height设置为0dp
2.9patch图片(.9.png拼接图片)
1号黑色条位置向下覆盖的区域表示图片横向拉伸时,只拉伸该区域 2号黑色条位置向右覆盖的区域表示图片纵向拉伸时,只拉伸该区域 3号黑色条位置向左覆盖的区域表示图片纵向显示内容的区域 4号黑色条位置向上覆盖的区域表示图片横向显示内容的区域
3.shape图形
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" <!-- 矩形|椭圆|线|环 --> android:shape=["rectangle" | "oval" | "line" | "ring"] > <!-- 圆角 --> <corners android:radius="integer" android:topLeftRadius="integer" android:topRightRadius="integer" android:bottomLeftRadius="integer" android:bottomRightRadius="integer" /> <!-- 固定色 --> <solid android:color="color" /> <!-- 渐变色 --> <gradient android:type=["linear" | "radial" | "sweep"] //linear 线性渐变,这是默认设置 //radial 放射性渐变,以开始色为中心 //sweep 扫描线式的渐变。 android:startColor="color" //颜色值 起始颜色 android:endColor="color" //颜色值 结束颜色 android:centerColor="integer" //渐变中间颜色,即开始颜色与结束颜色之间的颜色 android:angle="integer" //渐变角度 android:centerX="integer" //渐变中心X点坐标的相对位置 android:centerY="integer" //渐变中心Y点坐标的相对位置 android:gradientRadius="integer" //渐变色半径.当 android:type="radial" 时才使用。单独使用 android:type="radial"会报错 /> <!-- 边框 --> <stroke android:width="integer" android:color="color" android:dashWidth="integer" android:dashGap="integer" /> <!-- 边距 --> <padding android:left="integer" android:top="integer" android:right="integer" android:bottom="integer" /> <!-- 大小 一般不指定--> <size android:width="integer" android:height="integer" /></shape>
4.获取RadioGroup中被选中的条目
1.调用RadioGroup的getCheckedRadioButtonId方法
5.使用命令行查看数据库
1.sqlite3 mythmayor.db命令进入数据库模式
6.ListView空数据的处理
1.在布局文件中添加上空数据时的布局2.在适配器的getCount方法中,根据数据是否为0,对空数据时的布局进行显示和隐藏
7.ListView的优化
1.复用历史缓存的view对象convertView,减少view对象创建的次数2.使用ViewHolder保存子View引用,减少findViewById的次数@Overridepublic View getView(int position, View convertView, ViewGroup parent) { View view ; ViewHolder holder; //1.复用历史缓存的view对象convertView,减少view对象创建的次数 if(convertView==null){ view = View.inflate(CallSmsSafeActivity.this, R.layout.item_call_smssafe, null); //2.ViewHolder保存子View引用 holder = new ViewHolder(); holder.tv_phone = (TextView) view.findViewById(R.id.tv_item_blacknumber); holder.tv_mode = (TextView) view.findViewById(R.id.tv_item_mode); holder.iv_delete = (ImageView) view.findViewById(R.id.iv_item_delete); //ViewHolder保存到View对象里 view.setTag(holder); }else{ view = convertView; holder = (ViewHolder) view.getTag(); }}/** * view 的容器,用来存储子孩子的引用. */class ViewHolder{ TextView tv_phone; TextView tv_mode; ImageView iv_delete;}
8.加载大量数据的优化方法
1.初始化 1.1 在布局文件中加入进度条,加载数据之前显示进度条 1.2 加载数据放在子线程中,加载数据后隐藏进度条 1.3 调用runOnUiThread方法修改界面2.非初始化 2.1 不再重新查找所有数据,仅添加单条数据到集合中 2.2 将需要的其他数据也添加到Intent中 2.2 添加单条数据到集合里,刷新界面
9.优化的本质和原则
1.本质:拆东墙补西墙,根据需求进行取舍。2.原则: 2.1 时间换时间——禁用开机启动项 2.2 时间换空间——byte[] buf=new byte[1024]. 2.3 空间换时间——Everythings,Android图库,创建本地文件保存数据索引 2.4 空间换空间——虚拟内存,ramdisk3.补充Universal Image Loader的核心原理 3.1 运用空间换时间,将从服务器获取的图片缓存到内存里。 3.2 内存的空间是有限的,运用空间换空间,在SD卡里也将图片缓存一份 3.3 取图片的时候先从内存中取,因为内存取最快 3.4 内存中没有的时候从SD卡里取
10.监听来电状态
private TelephonyManager tm;private MyPhoneStateListener listener;//1.初始化时注册一个电话状态的监听器@Overridepublic void onCreate() { tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); listener = new MyPhoneStateListener(); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate();}//2.创建电话状态监听器private class MyPhoneStateListener extends PhoneStateListener{ @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲状态 break; case TelephonyManager.CALL_STATE_RINGING://响铃状态 String mode = dao.find(incomingNumber); //1.电话拦截 2 短信 3全部拦截. if("1".equals(mode)||"3".equals(mode)){ Log.i(Tag,"挂断电话"); } break; case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态. break; } }}//3.注销时释放资源@Overridepublic void onDestroy() { super.onDestroy(); tm.listen(listener, PhoneStateListener.LISTEN_NONE); listener = null;}
11.判断某个服务是否处于运行状态
public static boolean isServiceRunning(Context context,String serviceFullName){ //得到系统的进程管理器 ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); //得到系统里面正在运行的服务 List<RunningServiceInfo> infos = am.getRunningServices(200); for(RunningServiceInfo info:infos){ if(serviceFullName.equals(info.service.getClassName())){ return true; } } return false;}
阅读全文
0 0
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- L1_SVD方法的稀疏矩阵的DOA估计
- [平衡树 模拟] SnackDown 2017 Online Elimination Round #WIQ Waiting in a Queue
- Myeclipse 是如何启动tomcat服务
- 原生jq实现图片上传到服务器
- Android三级目录、ListView单选/GridView单选、ListView多选/GridView多选
- Android
- 设计模式之代理模式
- 25岁做什么,可以让你在5年后受益匪浅?
- select下拉列表, 从数据库查询,动态添加选项option
- spring mybatis 调用存储过程
- 微信小程序实战
- 语义分割--Label Refinement Network for Coarse-to-Fine Semantic Segmentation
- JVM 使用javap反编译命令解释i++和++i的区别
- C++常用知识点汇总(基础)