1.获得屏幕的高度和宽度
width=context,getResources().getDisplayMetrics().widthPixels;
height=context.getResources().getDisplayMetrics().heightPixels;
2.在Android Studio中隐藏ActionBar的方法。
getSupportActionBar().hide() 不可以使用getActionBar().hide()。会报空指针异常。
3.onDraw()方法什么时候执行
onDraw实在View初始化完成之后开始调用
postInvalidate()是重绘的,也就是调用postInvalidate()后系统会重新调用onDraw方法画一次
4.绘制渐变圆
Shader mShader=new SweepGradient(圆形x,圆形y,Color.TRANSPARENT, Color.parseColor("#AAAAAAAA"));
paint.setShader(mShader); //设置在绘制的过程中进行渐变
5 canvas.concat(matrix);
canvas.concat()的作用可以理解成对matrix的变换应用到canvas上的所有对象
6.JSON数据中,集中符号的表示意思:
{}:大括号表示对象
[ ] : 中括号表示数组
“ ” :双引号内是属性或值
:: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
例如:{“name” : "Michael"}可以理解为是一个包含name为Michael的对象
[{“name”: "Michael"}, {"name" : "sanshi"}] 就表示包含两个对象的数组
第二句也可以使用以下的代码表示:
{“name” : ["sanshi" , "Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象
7. JSON解析的三种方式
第一. 传统的JSON解析 可以把json字符串解析为一个javabean,一个List数组,一个嵌套Map的List数组
第二. GSON解析 Gson.fromJson(jsonString , cls);
第三. FastJson解析 JSON.parseObject(jsonString, cls);
8. EditText中常见但是不常用的属性
android:textCursorDrawable="@null" 这个属性是用来控制光标的颜色
“@null” 作用是让光标颜色和text color颜色一样
android:cursorVisible="false" 隐藏edittext闪烁的光标
android:paddingLeft=“10dp” 需要在EditText输入的时候左起位置和自动换行后每行的左起位置都能空出10dp
9.ListView各个条目之间如何留有一定的空隙
android:dividerHeight="10dp" 各个条目之间上下的间隔为10dp
10. android:autoLink: 设置是否当文本为URL链接、email、电话号码、map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
android:autoText 如果设置,将自动执行输入值的拼写纠正。
android:digits 设置允许输入哪些字符,如果“123456789”
android:ellipsize 设置当文字过长时,该空间该如何显示,有如下值设置: “start”----?省略号显示在开头; "end" ----省略号显示在结尾; “middle”---省略号显示在中间,“marquee”----以跑马灯的方式显示(动画横向移动)
android:marqueeRepeatLimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。
android:hintText 为空是显示的文字提示信息,可通过textColorHint设置提示信息的颜色。
android:ems 设置TextView的宽度为N个字符的宽度
android: textAppearance设置文字的外观
如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,
?表示系统是否有这种外观,否则使用默认的外观。
可设置的值如下:
textAppearanceButton/
textAppearanceInverse/
textAppearanceLarge/
textAppearanceLargeInverse/
textAppearanceMedium
android:textScaleX 设置文字之间间隔,默认为1.0f
android:textStyle 设置字形[bold 粗体 0, italic 斜体 1,bolditalic(又粗又斜) 2] 可以设置一个或多个,用" | " 隔开
11.RatingBar的使用
RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定,使用RaingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式,一种是ratingBarStyleSmall,大风格用于ratingBarStyleIndicator。其中大的只适合指示,不适合于用户交互。
几个重要的属性:
android:isIndicator RatingBar是否是一个指示器,
android:numStars 显示星型数量,必须是一个整形值,像“100”
android:rating 默认的评分,必须是浮点类型,像“1.2”
android:stepSize 评分的步长,必须是浮点类型,像“1.2”
12.FragmentActivity 与Activity的区别
1.FragementActivity继承自Activity,用来解决Android3.0之前无法使用Fragment的问题,所以在使用的时候需要导入android-support-v4.jar兼容包,同时继承FragmentActivity,这样在Activity中就能嵌入Fragment来实现你想要的布局效果
2. 当然Android3.0之后你就可以直接继承自Activity,并且在其中嵌入使用Fragment
3. 获得FragmentManager的方式也不同
android 3.0 以下 : getSupportFragmentManager();
android 3.0以上: getFragmentManager();
13. onLayout(boolean changed, int l, int t, int r , int b)各个参数的作用:
参数changed表示view有新的尺寸或位置
参数 l 表示相对于父view的Top位置
参数 r 表示相对于父vie的right位置
参数 b 表示相对于父view的Bottom位置
14.为什么自定义View中onLayout方法被执行两次是怎么回事
如果父视图的子视图的个数为0,就会执行一次。否则就会执行多次。因为开始时父视图中是没有子视图的。但是当你从xml文件中加载子视图或者或者在Java代码中添加子视图时,父视图的状态会发生变化,这个变化会引起onLayout甚至onMeasure.
15.Application中的两个获取Context方法的区别getApplication() 和 getApplicationContext()
getApplication() 与 getApplicationContext() 这两个获取Application实例的方法,在Activity和service中是没有没有任何区别的,但是getApplicationContext()的作用范围比getApplication()的作用范围更广,例如在BroadcastReceiver中也想获得Application实例,就不能使用getApplication(), 就只能使用getApplicationContext()方法了。意思就是说,getApplicationContext的作用范围更广,任何一个Context,都可以使用getApplicationContext()方法拿到我们的Application对象。
16. ListView加载网络图片的问题
每当有新的图片进入界面时,就会回调getView()方法,而在getView()方法中会开启异步请求从网络上获取图片,注意网络操作都是比较耗时的,也就是说当我们快速滑动ListView的时候就很有可能出现这样一种情况,某一个位置上的元素进入屏幕后开始从网络上请求图片,但是还没等图票下载完成,他就又被移出了屏幕。这种情况下会产生什么样的现象呢? 根据ListView的工作原理,被移出屏幕的控件将会很快被新进入屏幕的元素重新利用起来,而如果在这个时候刚好前面发起的图片请求有了响应,就会将刚才位置上的图片显示到当前位置上,因为虽然他们位置不同,但都是共用的同一个ImageView实例,这样就出现了图片乱序的情况。但是还没有完结,新进入屏幕的元素他也会发起一条网络请求来获取当前位置的图片,等到图片下载完的时候会设置到同样的ImageView 上面,因此就会出现先显示一张图片,然后有变成另外一张图片的情况。
17. 请使用命令行的方式创建一个名字为myAvd , sdk版本为2.2 , sd卡是在d盘的根目录下,名字为scard.img, 并制定屏幕大小为HVGA
答案:android create avd -n myAvd -t 2.2 -s HVGA -c d:\scard.img
选项中 -t : target新的AVD的Target ID(必须)
-c : sdcard指向一个共享的SD存储卡的路径或是为新的AVD定制新的SD卡的容量大小
-p : path新AVD将被创建的位置路径
-n : name新AVD的名称
-f : force强制创建(覆盖已存在的AVD)
-s : skin 新AVD的皮肤
18. 手机屏幕关于VGA、QVGA、WVGA、HVGA的区别
VGA: 即“Video Graphics Array”。是IBM推出的。具有分辨率高,显示速率快,颜色丰富等优点。
QVGA:是VGA的四分之一尺寸,在液晶屏幕上输出的分辨率是240*320.支持屏幕旋转。由HandEra公司发布,多用于手持/移动设备。
WVGA:即“Wide VGA”。其分辨率为800*480像素。是扩大了VGA(640*480)的分辨率。应用于PDA和手机等,WVGA 的屏幕更适合与浏览网页,可以说是未来手持的分辨率的大趋势。
HVGA:是VGA的一半,分辨率是480*320,他适用于各种各样的PDA设备。
19. Android中的IPC机制(进程间的通信)
IPC是内部进程通信的简称,是共享“命名管道”的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Service端实现IPC接口,Client端调用IPC接口本地代理。
20. NDK是什么?
NDK是一系列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和Java应用打包成apk包。
NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu、平台等的差异,开发人员只需简单的修改mk文件就可以创建出so.
21. afinal 支持断点续传。
afinal是一个开源的android的orm和ioc应用开发框架,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm,无需任何配置信息,一行代码就可以对android的splite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http请求进行操作。
主要组件,FinalHttp : 用于请求http数据,直接ajax方式请求,文件上传,断点续传下载文件等
FinalBitmap: 用于显示bitmap图片,而无需考虑线程并发和oom等问题
FinalActivity : 完全可以通过注解方式绑定控件和事件,无需编写代码
FinalDb : android中sqlite的orm框架,一行代码搞定增删改查
22. 获取应用程序中的最大可用内存
int maxMemory = (int)Runtime.getRuntime().maxMemory();
23. Bitmap 与Drawable的区别
Bitmap :称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888.作为一种主限速的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable : 作为Android下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变,图形等。
详解:A bitmap is a drawable . A Drawable is not necessarily a bitmap ,Like all thumbs are fingers but not all fingers are thumbs;
Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap
怎么把bitmap转换成Drawable?
BitmapDrawable drawable = new BitmapDrawable(getContext().getResources(), bitmap);
24.设置ListView每个条目之间的间隔
android:divider="@color/background";
android:dividerHeight="10dp"
25.在使用svn进行提交代码的时候,注意备注的日志信息不能够为空,如果为空的话在会提示提交不成功,还得重新提交。切记。
26. 在使用Gson解析json字符串的时候,怎么建立JavaBean 是非常关键的。要注意一下三点,
第一. 内部嵌套的类必须是static的,要不然解析会出错。
第二. 类里面的属性名必须跟json字段里面的key是一模一样的。
第三. 内部嵌套的用[], 括起来的部分是一个List, 所以定义为public List<B> b. 而只用{}嵌套的就定义为public C c;
请看如下代码:
json字符串 :
String json = {
"a":"100",
"b":[{"b1":"b_value1","b2":"b_value2"},
{"b1":"b_value1","b2":"b_value2"}],
"c": {"c1":"c_value1","c2":"c_value2"}
}
相对应的Bean类为:
public class JsonBean{
public String a;
public List<B> b;
public C c;
public static class B{
public String b1;
public String b2;
}
public static class C{
public String c1;
public String c2;
}
}
27. 在程序代码中如何获取手机的信息
TelephonyManager tm=(TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
String mtyb=android.os.Build.BRAND; //手机品牌
String mtype=andoid.os.Build.MODEL; //手机的型号。
String number= tm.getLine1Number(); //手机号码
String serviceName=tm.getSimOperatorName(); //运营商
28. 一般情况EditText控件,默认的对齐方式是居中对齐。android:gravity="center". 如果我们想要EditText的光标在左上角提示的话,我们必须把下面这个属性设置为:android:gravity=“top”
29.getPackageManager();的方法使用
通过Activity的getPackageManager()方法可以得到PackageManager的对象
1.PackageManager 的getInstalledPackages(int flags)方法可以得到所有安装在机器上的程序的包信息类对象List<PackageInfo>,PackageInfo类中有一值applicationInfo可以得到Application的对象。
2.PackageManager的getInstalledApplications(int flags)方法可以得到所有安装在机器上的程序的application对象List<ApplicationInfo>;
30.自定义异常是捕获一个try/catch中出现的异常,这些异常会在网站的“异常报告”区域显示查看,您可以调用一下方法实现:
TestinAgent.uploadExcepiton(Context context , String message, Throwable throwable);
TestinAgent.uploadExcepiton(getApplicationContext(), String message, Throwable throwable);
31. "application/vnd.android.package-archive" 是文件类型,具体对应apk类型
32. EditText获取焦点的方法,下面的三个属性必须同时设置:
private TextView password=null;
password.setFocusable(true);
password.setFocusableInTouchMode(true);
password.requestFocus();