2018-01-03始

1.Activity和AppCompatActivity区别:activity默认没有标题栏
2.删除系统应用

mount -o rw,remount /system 卸载系统应用时先运行这句
chome 777 system 添加 system 目录权限
然后把 /system/app 和 /data/data 下的相关文件删掉
reboot 重启盒子
然后就可以安装 debug 应用
如果开发盒子的系统应用时,当通过 AS 编译运行到盒子时,如果盒子上已装有 release 版,那么 AS 是无法将项目跑到盒子上的,需要先将系统应用删除后才可以正常开发。

3.xml焦点控制

android:descendantFocusability-----父容器和子控件的焦点获取问题
这个属性定义了当一个焦点要传递给父容器或者子控件时,父容器和子控件之间获得焦点的关系。
具体值如下:
beforeDescendants:父容器会比其子控件率先获得焦点。
afterDescendants:如果没有任何子控件要获得焦点的话,那么父容器才会获得焦点。
blocksDescendants:父容器会阻止其子控件获得焦点(也就是说焦点会由父容器获得)。
android:duplicateParentState
这个属性指的是当前控件是否跟随父控件的(点击、焦点等)状态。
我一般是结合上面的 blocksDescendants 和这个属性一起用,达到防止子控件获取焦点但同时子控件又能响应父控件焦点的变化状态。
android:nextFocusRight------控制下一个焦点

4.xml 动画文件里值的含义


2018-01-03始_第1张图片
image.png

三种形式
绝对坐标:数字
相对于View本身控件坐标:数字+%
相对于父控件坐标:数字+%p

5.OnGlobalLayoutListener

这个回调可以用于获取 view 宽高:

private int mViewHeight;
private View mView;
...
//注册监听
mView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //获取View高度
        mViewHeight = mView.getHeight();
        //取消监听,否则该方法会不断回调
        mView.getViewTreeObserver().removeGlobalLayoutListener(this);
    }
}
)

我们知道在 onCreate() 中 View.getWidth 和 View.getHeight 无法获得一个 view 的高度和宽度,这是因为 View 组件布局要在 onResume() 回调后完成。所以现在需要使用 getViewTreeObserver().addOnGlobalLayoutListener() 来获得宽度或者高度。这是获得一个 view 的宽度和高度的方法之一。
但是需要注意的是 OnGlobalLayoutListener 可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener 注销掉。

6.TextView设置不同字体样式


image.png

关键方法:setSpan()
支持设置的字体格式(继承 CharacterSty 均可):
字体颜色-------ForegroundColorSpan
字体大小-------AbsoluteSizeSpan
背景颜色-------BackgroundColorSpan
超链接----------URLSpan
粗体、斜体----StyleSpan
删除线----------StrikethroughSpan
下划线----------UnderlineSpan
图片-------------ImageSpan

7.merge 标签注意事项

(1).merge 必须放在布局文件的根节点上。
(2).merge 并不是一个 ViewGroup,也不是一个 View,它相当于声明了一些视图,等待被添加。
(3).merge 标签被添加到 A 容器下,那么 merge 下的所有视图将被添加到 A 容器下。
(4).因为 merge 标签并不是 View,所以在通过 LayoutInflate.inflate 方法渲染的时候, 第二个参数必须指定一个父容器,且第三个参数必须为 true,也就是必须为 merge 下的视图指定一个父亲节点。
(5).如果 Activity 的布局文件根节点是 FrameLayout,可以替换为 merge 标签,这样,执行 setContentView之后,会减少一层 FrameLayout 节点。
(6).自定义 View 如果继承 LinearLayout,建议让自定义 View 的布局文件根节点设置成 merge,这样能少一层结点。
(7).因为 merge 不是 View,所以对 merge 标签设置的所有属性都是无效的。

8.调用系统的安装应用界面

1.设置 intent 的 dataAndType ,用隐式调用法来启动系统的安装界面
2.传入apk的uri路径:file://mnt/sdcard/aa.apk
3.和指定的type:application/vnd.android.package-archive

示例代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//传入apk路径还有设置type
intent.setDataAndType(Uri.fromFile(new File(Config.getAppDir(content),apkName)), "application/vnd.android.package-archive")

9.坐标基础

View 的坐标系统是相对于父控件而言的:
getTop(); //获取子View左上角距父View顶部的距离
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离


2018-01-03始_第2张图片
image.png

MotionEvent 中 get 和 getRaw 的区别:
event.getX(); //触摸点相对于其所在组件坐标系的坐标
event.getY();
event.getRawX(); //触摸点相对于屏幕默认坐标系的坐标
event.getRawY();


2018-01-03始_第3张图片
image.png

10.SharePreference监听

SharePreference上一旦有什么风吹草动就会执行一下方法

SharedPreferences sp1 = getSharedPreferences(getPackageName() + "test", MODE_PRIVATE);
sp1.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() { 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
         // do any thing you want 
    }
});

11.7.0文件路径问题:
在application的oncreate里面添加

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }

12.//取消严格模式 FileProvider(用于解决7.0以上的拍照闪退问题)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

13.Android NDK APP_STL gnustl_shared is no longer supported 报错处理

错误原因:APP_STL gnustl_shared 不再被ndk支持。
由于 Android OS 放弃GCC转向了 Clang 编译器, 所以 NDK 将移除GCC, 所以建议用Clang编译你的程序。
修改 Applicaiton.mk 中的相关配置

  1. APP_STL := gnustl_static 改为 APP_STL := c++_static;
    2.删除NDK_TOOLCHAIN or NDK_TOOLCHAIN_VERSION;
    对于cmake编译:
    1.删除 ANDROID_TOOLCHAIN
    对于独立的toolchains
    用clang/clang++ binaries 代替 gcc/g++.

你可能感兴趣的:(2018-01-03始)