[置顶] Android琐碎知识点,不断更新中

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();



你可能感兴趣的:(知识点)