zoukankan      html  css  js  c++  java
  • Android开发走过的坑(持续更新)

    1 华为 nova真机 打印不出Log

    参考资料:http://www.apkbus.com/thread-585228-1-1.html

    解决:针对权限问题,我们当然也可以解决的,华为手机在你的拨号界面,请拨*#*#2846579#*#*,我们就进入了工程菜单,接下来我们就可以操作了。点击ProjectMenu,进入后台设置,很容易看到的就是LOG设置。进入LOG设置,将AP日志打钩并关闭,或许你还有顾虑,那你就全部选中然后关闭,然后重新启动手机。

    2 AS 在用vivo x9手机运行程序时,出现“解析软件包时出现问题”的问题。

    参考资料:https://blog.csdn.net/wl521124/article/details/80558155

    解决方法:

    打开as 的setting界面,把instant run 界面的 enable 前面的√去掉,如下图:

    3 launching app client not ready yet

    新建工程时,打包运行,没有打包,也没有报错,提示 launching app client not ready yet

    这个是一个很低级的错误,因为我新建工程时选择的是no activity, java文件下都没有代码,能打包成功才怪呢,估计只有像我这种菜鸟才犯这样的低级错误吧。老鸟也是一个坑一个坑过来的,这就是成长吧

    从新建了一个工程,这次选的是empty activity, 这样再打包运行就可以了

    4 kotlin定时器的使用

    protected var mCompositeDisposables: CompositeDisposable? = null
    var disposable = Observable.timer(800, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread()).subscribe{mAdapter.notifyDataSetChanged()}
                mCompositeDisposables?.addAll(disposable)

    上面代码表示延迟执行mAdapter.notifyDataSetChanged() 800ms

    5 用Java代码改变xml布局中的margin 

    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)plSupport.getLayoutParams();
                            layoutParams.bottomMargin = 0;
                            plSupport.setLayoutParams(layoutParams);

     方法二:

    ImageView image = (ImageView) findViewById(R.id.main_image);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(image.getLayoutParams());
    lp.setMargins(50, 100, 0, 0);
    image.setLayoutParams(lp);

    参考:Android,View设置margin

    6 本地打包是好的,jenkins打包有一个弹窗显示和本地打包显示的不一样

    原因:定义的bean类没实现 basebean 导致解析不了

    解决,定义的bean类实现 basebean

    7 Namwspace 'app' is not bound

    主要的问题是根节点少了一个声明。

    xmlns:app="http://schemas.android.com/apk/res-auto"

    参考:https://blog.csdn.net/mr_hjy/article/details/87436179

    8 用Java改变TextView中的textStyle

    例 字体加粗

    xxx.setTypeface(null, Typeface.BOLD);
    

    9 Java 自定义路由

    try {
                    JSONObject param = new JSONObject();
                    param.put("selectTopic", true);
                    JSONObject data = new JSONObject();
                    data.put("name", "topic_list");
                    data.put("param", param);
                    JSONObject route = new JSONObject();
                    route.put("page", "flutter");
                    route.put("data", data);
                    .jump(route);
                }catch (Exception e){
                    e.printStackTrace();
    }
    

    10 Android开发神器 Pandora

    将pandora集成后,app只需摇一摇即可出现工具箱,包含ui、网络、沙盒(数据库等)、选择控件等功能

    11 命令行编辑

    ./gradlew build (或者执行 ./gradlew assembleEnvtest 只打包测试版本)

    cd build/outputs/apk/debug

    adb install -r app-debug.apk 安装

    12 【android】AudioManager音量控制

    //音量控制,初始化定义

    AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

    //最大音量

    int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

    //当前音量

    int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

    直接控制音量的多少:

    if(isSilent){

      mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);

    }else{

      mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, tempVolume, 0); //tempVolume:音量绝对值

    }

    13 AudioManager(音频管理器)

    https://www.runoob.com/w3cnote/android-tutorial-audiomanager.html

    14 大家对HttpUrlConnection这个类并不陌生,它处于java.net包下的,是JDK支持的。它主要用来服务器端发送Http请求

    15 EventBus发消息所在文件,不用注册EventBus,如果注册了EventBus,没有接受,就会报错

    EventBusException: Subscriber class *** and its super classes have no public methods with the @Subsc

    16 ScrollView下轮播图片加载不出来,原因是ScrollView下只有一个轮播组件

    结局:ScrollView下放一个RelativeLayout或者LinearLayout,再把轮播组件放到RelativeLayout内

    注意:ScrollView的子元素只能有一个,可以是一个View(如ImageViewTextView等) 也可以是一个ViewGroup(如LinearLayoutRelativeLayout等),其子元素内部则不再限制,否则会报以下异常。

    17 adb导出手机日志

    1 adb devices 看看有没有连接成功手机

    2 adb logcat -d > log.txt 已log.txt文件名保存 

    18 在Android开发中,常常需要调用对话框,但会遇到这样一种情况,在显示对话框的时候,点击对话框以外的屏幕其他区域,会关闭对话框。以下是解决该问题的设置:

     
    AlertDialog.Builder builder = new AlertDialog.Builder(context);

     
    //不关闭写法
    builder.setCancelable(false); 
     
    //关闭写法
    builder.setCancelable(true); 

    参考:https://blog.csdn.net/xiaohei5188/article/details/16827709

    19 ImageView实现圆角效果

    方法一:使用CardView包裹ImageView, CardView可以设置圆角

    方法二:自定义CustomImageView继承ImageView实现圆角效果

    如果想单独设置左上角,右上角2个角是圆角,另外2个角不是圆角,就要使用自定义CustomImageView

    坑:为什么使用自定义CustomImageView设置的圆角不起作用,原因是高度和宽度用的是match_parent, 把高度和宽度设置成固定值就起作用了

    20 android 重构

    参考1: https://www.jianshu.com/p/28dc6e3ef59e

    参考2:http://www.imooc.com/article/4095

    android编码规范,参考:https://www.jianshu.com/p/f5a55dff62f0

    21 AS 编译失败,可以删除android包下的.idea问价,然后重新build试试

    22 透明度渐变动画

         //fromAlpha   动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

                    //toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

                    alphaAnimation = new AlphaAnimation(0, 1);

                    alphaAnimation.setDuration(2000);

                    tvDemo.startAnimation(alphaAnimation);

    23 TextView 代码中设置字体加粗

    if (info.getMsgstatus() == 1) {
        holder.contentText.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    //加粗
    }else{
        holder.contentText.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
    //常规
    }

    参考 https://blog.csdn.net/qq_33650812/article/details/76670224

    24 设置TextView字体颜色

    一、通过配置文件XML写入属性

    <.......android:color="#FFFFFF"/> 
    <.......android:color="@color/colorPrimary"/>  //从colors.xml读取键值
    二、在Activity内设置

    tv.setTextColor(0xFFFFFFFF);//前面看帖子给的是0xFFFFFF,后面用Color.GRAY才发现,Android Studio里面显示应该是8个16位数,大家输入的时候需要小心
    tv.setTextColor(Color.GRAY); //使用Color的常数
    tv.setTextColor(Color.rgb(255, 255, 255)); //用Color的rgb进行转换
    tv.setTextColor(Color.parseColor("#FF0000"));  //用Color的parseColor进行转换
    tv.setTextColor(Context.getResources().getColor(R.color.colorPrimary));//通过获取上下文,进行获取colors.xml内配置的值,一定要配置好Context
    ————————————————
    参考:https://blog.csdn.net/sharpeha/article/details/89485353

    24 获取TextView的行数

    网上搜资料查到可以通过textView.getLineCount()获取,但是获取不到

    下面方法可以获取:
    1 首先定义一个StaticLayout staticLayout

    2 新建StaticLayout实例

    3 通过staticLayout.getLineCount()获取

    private StaticLayout staticLayout;
       
    staticLayout = new StaticLayout(item.getName(), tvName.getPaint(), width, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
    
    int lineCount = staticLayout.getLineCount()

    25 android 启动页的配置

    <intent-filter>
              <action android:name="android.intent.action.MAIN" />
    
              <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
                        

    26 Unable to add window -- token null is not valid; is your activity running?

    在调用PopupWindow或者Dialog时,PopupWindow需要依附在一个当前创建好的Activity,如果所依赖的Activity不在running,就会出现上面的问题,解决方法有3个,可以一个一个试

    1)使用的Context对象不对,使用了getApplicationContext(),解决方法用当前Activity.this替代getApplicationContext()

    YourActivityName.this instead of getApplicationContext() at

    Dialog dialog = new Dialog(getApplicationContext());

    2)有可能当前Activity还没有渲染完成就调用,使用Handler增加一个延时可以解决,参考https://www.cnblogs.com/mochaMM/p/5098343.html

    3)重写onWindowFocusChanged方法,参考https://blog.csdn.net/wuzhipeng1991/article/details/38656967

    27 AS大小写切换键

    大小写切换

    Ctrl+Shift+U

    28  java.lang.IllegalStateException

    使用Rxjava导致的内存泄漏导致的问题

    rxjava虽然好用,但是总所周知,容易遭层内存泄漏。也就说在订阅了事件后没有及时取阅,导致在activity或者fragment销毁后仍然占用着内存,无法释放。而disposable便是这个订阅事件,可以用来取消订阅。

    参考
    链接:https://www.jianshu.com/p/2a882604bbe8

    29 java float转int,直接舍去小数后面的数字,不是四舍五入,注意,防止入坑

    30 安装zsh后adb每次都要重新运行source ~/.bash_profile才可以使用,解决方法,在.zshrc文件的第一行加入source ~/.bash_profile,就可以解决这个问题

    31 AIDL(Android Interface Definition Language)

    32 

    当代码库远程迁移后,修改本地代码关联的远程地址

     
    git remote set-url origin http://jcode.cbpmgt.com/git/<your rep name>.git/

    33 

    java中设置ImageView的src

    if(view instanceof ImageView){
         ((ImageView)view).setImageResource(getResources().getDrawable(R.drawable.xxx)
    ); } // 设置背景用:  viewgroup.setBackgroundResource(background);

    34

    switch case种不能对null进行switch,否则会出现
    Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference

    35 GridView设置左右边距都为16,例如有4列

    /**
             *  gridView的item左右边距都是16,item居中,所以
             *  gridViewMargin + (ScreenWidth - 2 * gridViewMargin - 80 * 4)/8 = 16;
             *  得出gridViewMargin = (448 - ScreenWidth) / 6;
             */

    36 gradient angle角度方向问题

    ndroid:angleInteger,代表渐变颜色的角度, 0 is left to right, 90 is bottom to top. 必须是45的整数倍. 

    默认是 0.该属性只有在type=linear情况下起作用,默认的type为linear。

     默认情况下,从左到右

    angle = 270, 从上到下

    参考https://blog.csdn.net/l_215851356/article/details/79408848

    37 android获取textview的行数

    mTextView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    
    @Override
    public void onGlobalLayout() {
    // TODO Auto-generated method stub
    Log.e(TAG, "行数"+mTextView.getLineCount());
    
     mTextView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    
    if(mTextView.getLineCount()>0){
    
     mTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    
    }
    
    
    }
    });

    参考:https://blog.csdn.net/weixin_30912051/article/details/95115518?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/xinzaimengzai/p/11314170.html
Copyright © 2011-2022 走看看