Android开发知识小集

  1. 注解
    1. @SuppressLint
  2. 样式
    1. 背景透明
  3. WebView
    1. JS 调起的方法中,WebView 执行的 UI 相关操作需要在主线程处理
    2. Cookie 的使用
  4. UI
    1. 获取屏幕大小
  5. Gradle
    1. 指定文件路径

注解

@SuppressLint

Lint是一个静态检查器,它围绕Android项目的正确性、安全性、性能、可用性以及可访问性进行分析。它检查的对象包括XML资源、位图、ProGuard配置文件、源文件甚至编译后的字节码。

Lint还包含了API版本检查、性能检查以及其他诸多特性。

其中可以使用@SuppressLint标注忽略指定的警告。

不想用的话,可以右键点工程,然后在android tools 中,选择 clear lint marker。

样式

背景透明

<LinearLayout
    ...
    android:background="@android:color/transparent"
    ...>
</LinearLayout>

WebView

JS 调起的方法中,WebView 执行的 UI 相关操作需要在主线程处理

Js 调用 Java 方法时,不是在主线程 (Thread Name:main) 中运行的,而是在一个名为 JavaBridge 的线程中执行的,通过如下代码可以测试:

@JavascriptInterface
public void jsCallJava(String message){
    Log.i("thread", Thread.currentThread().getName());
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}

所以这里需要注意的是,当 Js 调用 Java 时,如果需要 Java 继续回调 Js,千万别在 JavascriptInterface 方法体中直接执行 loadUrl() 方法,而是进行线程切换操作,在主线程执行。

其次,使用 loadUrl() 方法实现 Java 调用 Js 功能时,也必须放置在主线程中,否则会发生崩溃异常。

另外,注意代码混淆时,记得保持 JavascriptInterface 内容,在 proguard 文件中添加如下类似规则 (有关类名按需修改):

keepattributes *Annotation*
keepattributes JavascriptInterface
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { 
    <methods>; 
}

Cookie 的格式

Set-Cookie: “name=value; domain=.domain.com; path=/; expires=Sat, 11 Jun 2016 11:29:42 GMT; HttpOnly; secure”

CookieManager 的 API

CookieManager cookieMgr = CookieManager.getInstance();
cookieMgr.setCookie("http://host.name/", "k1=v1;");
cookieMgr.setCookie("http://host.name/", "k2=v2;");
cookieMgr.setCookie("http://host.name/", "k3=v3;");
String result = cookieMgr.getCookie("http://host.name/"); 
// 结果为 "k1=v1; k2=v2; k3=v3;"
// setCookie 不能一次设置多个值,如 "k1=v1; k2=v2; k3=v3;",否则只有第一个 "k1=v1" 会被记录

UI

获取屏幕大小

//1、通过WindowManager获取(推荐)
final WindowManager w = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
final Display d = w.getDefaultDisplay();
final DisplayMetrics dm = new DisplayMetrics();
d.getMetrics(dm);
int heigth = dm.heightPixels;// 表示屏幕的像素高度,单位是px(像素)
int width = dm.widthPixels;// 表示屏幕的像素宽度,单位是px(像素)
 
//2、通过Resources获取
DisplayMetrics dm = getResources().getDisplayMetrics();
//这两个就是手机屏幕的屏幕分辨率,物理宽高值如1080*1920(ToolBar或ActionBar会占据一定空间,得到的heightPiexls会小一点)
int width = metrics.widthPixels;// 表示屏幕的像素宽度,单位是px(像素)
int height = metrics.heightPixels;// 表示屏幕的像素高度,单位是px(像素)
 float density = metrics.density;// 显示器的逻辑密度,Density Independent Pixel(如3.0),(metrics.scaledDensity和metrics.density数值是一样的)
int densityDpi = metrics.densityDpi;  // 整个屏幕的像素密度DPI(dots per inch每英寸像素数),可以是密度低,密度中等,或者密度高(如240/ 360 / 480)
float xdpi = metrics.xdpi;//表示在X轴方向上每英寸的像素值,X轴方向上的DPI(dots per inch)
float ydpi = metrics.ydpi;//表示在Y轴方向上每英寸的像素值,  Y方向上的DPI
 
//3、获取屏幕的默认分辨率
Display display = getWindowManager().getDefaultDisplay();
int heigth = display.getWidth();
int width = display.getHeight();
 
//4、通过类直接取
getWindowManager().getDefaultDisplay().getMetrics(dm);

科普:

  • DP(DIP),device independent pixels,长度单位(设备独立像素)。不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
  • px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
  • pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
  • sp: scaled pixels(缩放像素). 主要用于字体显示best for textsize。

dp也就是dip。这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

Gradle

指定文件路径

android {
// ···
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
// ···
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 mingfungliu@gmail.com

文章标题:Android开发知识小集

文章字数:1.3k

本文作者:Mingfung

发布时间:2019-12-18, 10:29:00

最后更新:2021-01-18, 15:06:27

原始链接:http://blog.ifungfay.com/uncategorized/Android开发知识小集/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

宝贝回家