美文网首页
安卓开发随笔

安卓开发随笔

作者: 无敌肥球王 | 来源:发表于2019-03-24 22:33 被阅读0次

    1.scrollview与recyclerview嵌套,滑动到底部:

    项目中遇到页面载入时总是滑动到最底部,原因是焦点在页面底部;

    解决方法就是在根布局设置Android:descendantFocusability="blocksDescendants" ;
    
    android:descendantFocusability 有三种值:
    
    beforeDescendants:viewgroup会优先其子类控件而获取到焦点
    
    afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
    
    blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
    

    2.尽量不要在循环中创建很多临时变量,可以将大型的循环分拆、分段或者按需执行,减少内存碎片

    private Object result[]=new Object[100];
    
    void foo(){
    
    for(int i=0;i<100;++i){
    
    byte[] temp=new byte[2000];
    
    result[i] = new byte[4];
    
    }
    
    }
    

    3.创建全局dialog:在创建Dialog时添加

    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    
    并在AndroidManifest.xml中添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    
    如果API>23,增加权限申请
    
    private static final int REQUEST_CODE = 1;
    
    private void requestAlertWindowPermission() {
    
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    
    intent.setData(Uri.parse("package:" + getPackageName()));
    
    startActivityForResult(intent, REQUEST_CODE);
    

    4.scrollview recyclerview滑动冲突

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) {
    
    @Override
    
    public boolean canScrollVertically() {
    
    return false;
    
    }
    
    };
    

    5.画虚线

    <?xml version="1.0" encoding="utf-8"?>
    
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    
    android:shape="line">
    
    <stroke
    
    android:width="3px"
    
    android:color="#FFFFFF"
    
    android:dashWidth="10px"
    
    android:dashGap="10px" />
    
    </shape>
    

    说明:

    显示一条虚线,width为线条的高度,dashWidth为破折线的宽度,dashGap为破折线之间的空隙的宽度,当dashGap=0时,就是实线

    注意:

    1. 如果在<stroke>标签中设置了android:width,则在<View>标签中android:layout_height的值必须大于android:width的值,否则虚线不会显示。如果不设置,默认android:width为0。

    2. 关于4.0以上设备虚线会变实线的问题:

    代码中可以添加:android:layerType="software"

    因为硬件加速导致虚线可能会被优化成实线

    6.edittext去掉下划线可以在xml中android:background="@null",但是如果在代码中setBackground(null),

    虽然下划线也会不见,但是跟xml中设置的区别是,代码中设置,下划线只是颜色变透明了,但是并没有从

    布局中去除,仍然占用控件空间,导致字体不能居中显示

    7.PHP框架会把Java传的空json串转化为空数组

    8.alertdialog会默认去除与软键盘的交互,所以如果需要自定义带输入框的弹出框,打开弹出框自动弹出输入法的话

    ,有两种方法:

    a.继承Alertdialog,在onCreate()时调用getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

    b.在dialog.show()之前调用:

    //只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘

    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

    //加上下面这一行弹出对话框时软键盘随之弹出

    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

    9.edittext maxLines在没有设置inputType前无效,除非使用singLine

    10.Gson解析,如果返回的json串不是空字符串的时候,解析都不会返回空对象,比如{}解析后会返回对象T,只不过T

    的属性都为空而已。

    11.Android在打包编译的时候会将aar包中的资源文件一并打入包中,这个时候第三方包的包名和类名都完全一致,这会导致在寻找需要的类的时候出现问题。

    所以这里我们就有两个不同的解决方案。

    1、引用jar包的源码,修改源码的包名。

    2、使用gradle的配置exclude掉重复的jar包。

    configurations {
    
    compile.exclude module: 'okhttp'
    
    compile.exclude module: 'fastjson'
    
    compile.exclude module: 'glide'
    
    }
    

    gradle针对jar包重复的问题的解决,详细的介绍可以看官方的文章

    https://docs.gradle.org/current/userguide/dependency_management.html

    11.沉浸式状态栏:

    1.Dialog和DialogFragment在设置style的时候api19及以上使用windowTranslucentStatus=true,api21及以上的时候使用windowTranslucentNavigation=true, statusBarColor设置透明

    2.PopupWindow需要调用setClippingEnabled(false)这个方法

    12.自定义布局的dialog

    ConstraintLayout的布局大小会有问题,缩成一团。RelativeLayout也不能按设置的大小正常显示,如果设置一个控件对父控件底部对齐会延伸到窗口底部。

    其他的传统布局没问题

    相关文章

      网友评论

          本文标题:安卓开发随笔

          本文链接:https://www.haomeiwen.com/subject/awnpvqtx.html