平时的一些总结--ing
来源:互联网 发布:机械设计画图软件 编辑:程序博客网 时间:2024/05/22 01:30
一:自定义一个Dialog,并且点击空白处可以取消的步骤:
1.编写一个自定义的LocationDialog的布局文件,R.layout.view_dialog;
2.自定义LocationDialog类,继承extends Dialog;
3.在onCreate()方法中加载并显示布局文件setContentView(R.layout.view_dialog);
4.设定点击窗口空白处取消会话 setCanceledOnTouchOutside(true);
5.代码动态设置自定义LocationDialog上的内容;
6.展示窗口 .show();
二.使用GPS/ 基站等定位时, 当前位置发生改变会回调LocationListener的()方法
(1)位置发生变化时调用 onLocationChanged(Location location)
location 封装了当前的位置信息:
double latitude = location.getLatitude(); 纬度
double longitude = location.getLongitude(); 经度
location.getAltitude(); 海拔
(2)定位方式状态发生变化时调用
onStatusChanged(String provider, int status, Bundle extras)
(3)定位方式不可用回调 onProviderDisabled(String provider)
定位方式可用回调 onProviderEnabled(String provider)
三.移动端的定位方式的理解。
1. 网络定位(WiFi定位)
手机扫描到WiFi信号, 对应的有路由器/猫, 路由器有mac地址和ip, 位置服务器提供商记录到数据库里,
精度和WiFi信号强度有关, 受更新频率影响, 只能精确到大致区域, 街道, 纯真ip.
2. 基站定位
手机和基站通信, 可以根据基站的位置以及信号强度计算自己的位置, 至少三个基站, 基站数量越多,
信号越强, 越精确, 精度在几十米-几公里
3. GPS定位
手机里有GPS芯片, 接收卫星发射的GPS信号, 根据卫星的位置, 以及信号中的信息, 确定自己的位置.
GPS指的就是美国的GPS系统. 至少获取四颗卫星的信号, 相对论, 军用信号/商用信号.
取决于芯片质量和信号强度, 一般的在室外, 受天气影响, 精度几米-几十米
星历, AGPS, 等专业名词可以自己查查, 了解即可.
Glonass定位:
Glonass是俄罗斯开发的一套定位系统,原理跟GPS一样,也是用很多很多天上飞的卫星来定位。不同的是:
①Glonass芯片比GPS贵;②它抗干扰性能强,阴天下雨高楼深壑的地方GPS可能就抓瞎了,Glonass却仍然能正常工作;③北半球定位精度比GPS强一些;④搜星速度快。
目前Glonass主要见于高端机型,比如苹果系列,HTC ONE等,都是GPS+Glonass双系统导航,精度相当之高,导航可以精确到车道。
四.判断当前手势方向,切换上一页或者下一页。
GestureDetector手势识别器
上一个页的Activity:FistActivity;
下一个页的Activity:NextActivity;
当前页面的Activity:CurrentActivity;
public class CurrentActivity extends Activity {
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxx);
/* 2. 创建 GestureDetector手势识别器*/
mGestureDetector = new GestureDetector(getApplicationContext(),
new MyGestureListener());
}
public class MyGestureListener extends GestureDetector.SimpleOnGestureListener{
// 单击
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
// 快速滑动
// e1: 按下去的那个事件,e2:抬起来的那个事件,velocityX X轴的速度
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
if (e2.getRawX() - e1.getRawX() > 100) {
// 向右滑,切换到上一页
startActivity(new Intent(this, FistActivity.class));
finish();
} else if (e1.getRawX() - e2.getRawX() > 100) {
// 向左滑,切换到下一页
startActivity(new Intent(this, NextActivity.class));
finish();
}
return false;
}
// 按下
public boolean onDown(MotionEvent e) {
return false;
}
}
/* 1. 重写Activity的onTouchEvent方法,在这个方法里处理触摸事件
* 当手指触摸到Activity上的时候,这个方法被调用
* 参数 MotionEvent event,表示整个触摸事件*/
public boolean onTouchEvent(MotionEvent event) {
mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
五.布局填充器LayoutInflater
1. public class MainActivity extends Activity {
2.
3. private LinearLayout mainLayout;
4. protected void onCreate(Bundle savedInstanceState) {
5. super.onCreate(savedInstanceState);
6. setContentView(R.layout.activity_main);
7. mainLayout = (LinearLayout) findViewById(R.id.main_layout);
8. LayoutInflater layoutInflater = LayoutInflater.from(this);
9. View buttonLayout = layoutInflater.inflate(R.layout.button_layout, null);
10. mainLayout.addView(buttonLayout);
11. }
12. }
可以看到,这里先是获取到了LayoutInflater的实例,然后调用它的inflate()方法来加载button_layout这个布局,最后调用LinearLayout的addView()方法将它添加到LinearLayout中
六 为什么加载布局叫setContentView()?
LinearLayout的父布局确实是一个FrameLayout,而这个FrameLayout就是由系统自动帮我们添加上的。
说到这里,虽然setContentView()方法大家都会用,但实际上Android界面显示的原理要比我们所看到的东西复杂得多。任何一个Activity中显示的界面其实主要都由两部分组成,标题栏和内容布局。标题栏就是在很多界面顶部显示的那部分内容,比如刚刚我们的那个例子当中就有标题栏,可以在代码中控制让它是否显示。而内容布局就是一个FrameLayout,这个布局的id叫作content,我们调用setContentView()方法时所传入的布局其实就是放到这个FrameLayout中的,这也是为什么这个方法名叫作setContentView(),而不是叫setView()。
最后再附上一张Activity窗口的组成图吧,以便于大家更加直观地理解:
七.SQLiteDatabase类封装了一些操作数据库的API,其中db.execSQL();方法中可以执行插入,删除,更新及CREATE TABLE等有更改行为的SQL语句。
答案说明:SQLiteDatabase类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
SQLiteDatabase的学习,应该重点掌握execSQL()和rawQuery()方法。
rawQuery()方法用于执行select语句。
execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;
八.导航栏内的只可选一个图标的组合按钮如何做?
可用RadioGroup做,将一个个的图标按钮用RadioButton做,如下:
1.去掉RadioButton文字前的圆圈:设置android:button=”@android:color/transparent”
2.插入图片DrawableTop
3.细节:设置图片和文字居中,图片和文字之间的距离;必须设置RadioGroup的排列方向
4.点击时的选中效果:通过分别给图片和文字各自加选择器达到;
5.默认选中第一个按钮:在RadioGroup节点内,设置android:checkedButton="第一个按钮的id".
九.如何获取设备的屏幕尺寸?
十.获取view的宽度的方法?
:getWidth()获得的宽度是View在设定好布局后整个View的宽度。
getMeasuredWidth()是对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure中的参数的值你自己可以定义),否则你得到的结果和getWidth()得到的结果是一样的。
两者的使用场合:
getMeasuredWidth:在自定义view重写onLayout时、在我们用layoutinflater动态加载view后想获得view的原始宽度时。
getWidth:一般在view已经布局后呈现出来了,想获取宽度时。
十一.Touch事件传递机制中,dispatchTouchEvent(..),onInterceptTouchEvent(..),onTouchEvent(..)方法的含义。
dispatchTouchEvent(..)方法:用来分派事件。
其中调用了onInterceptTouchEvent()和onTouchEvent(),一般不重写该方法
onInterceptTouchEvent(..)方法:用来拦截事件。
ViewGroup类中的源码实现就是{return false;}表示不拦截该事件,事件将向下传递(传递给其子View);
若手动重写该方法,使其返回true则表示拦截,事件将终止向下传递,事件由当前ViewGroup类来处理,就是调用该类的onTouchEvent()方法
onTouchEvent(..) 方法:用来处理事件。
返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View);
返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理
答案说明:注意:不是所有的View的子类,很多教程都说的是所有的View的子类,只有可以向里面添加View的控件才需要分发,比如TextView它本身就是最小的view了,所以不用再向它的子视图分发了,它也没有子视图了,所以它没有dispatch和Intercept,只有touchEvent。
十二、支持库?
就是让高版本才有的API在低版本中也能用,版本兼容
支持库路径:sdk\extras\android\support\
非系统控件(不是android.jar里面的控件),在xml中使用的时候必须使用全包名的方式,如: <android.support.v4.view.ViewPager />
什么是V4?代表支持的最低的API level,如:
android-support-v4.jar 支持的最低版本是 Android 1.6 (API 4)
android-support-v7.jar 支持的最低版本是 Android 2.1 (API 7)
invalidate()方法 :请求重绘View树,
即draw()过程,假如视图发生大小没有变化就不会调用layout()过程,并且只绘制那些“需要重绘的”
一般引起invalidate()操作的函数如下:
1、直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身。
2、setSelection()方法 :请求重新draw(),但只会绘制调用者本身。
3、setVisibility()方法 : 当View可视状态在INVISIBLE转换VISIBLE时,会间接调用invalidate()方法,继而绘制该View。
4、setEnabled()方法 : 请求重新draw(),但不会重新绘制任何视图包括该调用者本身。
如何使用户在点击PopupWindow对话框外部的时候,隐藏该对话框。
1.如果需要点击PopupWindow之外的地方或者back键让PopupWindow消失,PopupWindow的背景不能为空 ,调用setBackgroundDrawable(new ColorDrawable(0))设置背景,注意这里设置背景并不会覆盖xml文件定义的背景。
2. 当设置PopupWindow的setOutsideTouchable(true)时,设置的是它的外部可以点击,再加上设置它的背景不为空,点击PopupWindow对话框的外面或者点击Back键才会消失。
pw.setBackgroundDrawable(new ColorDrawable(0));
pw.setOutsideTouchable(true);
十三.动态的创建ListView的方法?
/**初始化布局*/
protected View initView() {
ListView listView = new ListView(mActivity);
//设置背景 listView.setBackgroundColor(颜色)
listView.setBackgroundColor(Color.BLACK);
//去掉默认的条目选择器的背景色setSelector(透明)
listView.setSelector(android.R.color.transparent);
//让listView的内容往下移动setPadding(0,top,0,0)
listView.setPadding(0, 40, 0, 0);
//去掉listView的分割线 将分割线高度设置为0
listView.setDividerHeight(0);
//添加条目点击事件 setOnItemClickLinstener
listView.setOnItemClickListener(this);
return listView;
}
十四.Dp和pix的转换?
public static int dp2Pix(Context context,int dp){
float density = context.getResources().getDisplayMetrics().density;
int a = (int)(dp*density+0.5f);
return a;
}
十五.国际化
只知道i18n,但不知道为什么叫i18n.今天翻到一哥们的播客才清楚:internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符.做i18n,如res/values-zh,values-en.
localization(本地化 ),简称L10n。 一般说明一个地区的语言时,用 语言_地区的形式,如 zh_CN, zh_TW.
各国语言缩写 http://www.loc.gov/standards/iso639-2/php/code_list.php,国家和地区简写http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
Android 对i18n和L10n提供了非常好的支持。android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不同的新视屏用不同的图片。
在eclipse的工程中,res目录有默认几项resource,如drawable,layout,menu,values其余还有
res/anim/ 用来放置动画
res/xml/ 用来放置style theme等xml定义。
res/raw/ 用来放置data数据
十六.常用的获取inflate的三种写法
1.View.infalte
view = View.inflate(context, R.layout.item_news, null);//将一个布局文件转换成一个View对象
2.使用LayoutInflater
LayoutInflater layoutInflater = LayoutInflater.from(context);
view = layoutInflater.inflate(R.layout.item_news, null);
3.使用Context.getSystemServcie
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.item_news, null);
十七.安卓下的数据库的两种增删改查的方法
第一种:使用SqliteDatabase的execSQL方法执行增删改;查询用rawQuery;
特点:增删改没有返回值,无法得知执行是否成功;查询比较灵活,可以做多表查询
1.创建帮助类对象
2.调用getReadabledatabase方法,帮助我打开数据库,并返回一个数据库操作对象 SqliteDatabase
3.通过数据库操作对象 SqliteDatabase执行增加数据的sql语句
第二种:使用SqliteDatabase的insert,delete update,query方法做增删改查;
特点:增删改有返回值,可以得知执行是否成功; 查询不够灵活不能做多表查询;
十八.使用XUtils进行网络请求的方法
HttpUtils httpUtils = new HttpUtils(5000);// 参1.连接超时时间
GetCallBack callBack = new GetCallBack();
// 请求服务端 参1.请求方法GET/POST2.地址3.接收对象
httpUtils.send(HttpMethod.GET, url, callBack); private class GetCallBack extends RequestCallBack<String> {
/***请求成功时调用的方法 200成功* @param responseInfo返回数据的封装*/
public void onSuccess(ResponseInfo<String> responseInfo) {
String json = responseInfo.result;
Log.i("SplashActivity", json + "");
}
/***请求失败调用的方法 404 5xx失败*/
public void onFailure(HttpException error, String msg) {
Toast.makeText(getApplicationContext(), msg, 0).show();
}
}
。
- 平时的一些总结--ing
- 平时使用VS2003总结的一些笔记
- 一些平时遇到的bug总结
- 自己平时在做项目时候的一些总结
- 安装ubuntu之后的一些设置总结(更新ing)
- 安装ubuntu之后的一些设置总结(更新ing)
- spark平时的一些笔记
- 平时使用的一些快捷键
- 平时遇到的问题总结
- 出来也好久了,2015年的最后一天起,写一些平时的总结吧!
- 平时总结
- php一些平时没 用到的函数
- 汇集平时用到的一些命令
- 平时要用到的一些页面
- android平时编码的一些小知识点
- 平时开发搜集的一些网址
- 一些平时遇到的英语单词摘录
- 平时的一些手绘,有点拿不出手哈
- webView向android 传值
- spring mvc框架整个执行过程,从输入http url,到action映射,再到action处理,返回jsp文件,解析jsp文件,然后渲染, 到返回给浏览器展示结果
- 【Leetcode】Evaluate Reverse Polish Notation
- ARC内存管理及强弱指针(二)
- 【Leetcode】Reverse Words in a String
- 平时的一些总结--ing
- 算法竞赛中的时间复杂度选择——以最大连续和问题为例
- JavaScript 标签自定义属性
- 【Leetcode】Decode Ways
- 实习入职第八天:MediaPlayer使用中最重要的知识点
- JdbcTemplate详解-1
- 二叉树的非递归插入和遍历
- 欢迎使用CSDN-markdown编辑器
- python:网络爬虫入门经验总结大大大大全