美文网首页
开发中遇到的问题

开发中遇到的问题

作者: most_xiaoya | 来源:发表于2018-11-15 20:53 被阅读0次

    1.switch 开发遇到的问题: 在setChecked之前要先设置 setCheckChangedListener(null),之后再重新设置setCheckChangedListener(this);
    说明:在开发中会遇到切换switch去发起请求 的情况,并且初始化也需要 先拿到状态值再去设置当前的状态 获取请求失败的时候 需要将状态回滚 但是并不希望去重新发起请求, ok 这时候就需要 在setChecked之前要先设置 setCheckChangedListener(null),再重新设置setCheckChangedListener(this);


    1. 在basequickAdapter 使用的时候 默认出现了头部就不会显示Empty,和尾部,配置以下方法也支持同时显示:
      setHeaderAndEmpty
      setHeaderFooterEmpty
      默认头部尾部都是占满一行,如果需要不占满可以配置:
      setHeaderViewAsFlow
      setFooterViewAsFlow
      在项目中就是遇到 设置空布局文件 有问题就是这个的影响,还有就是空页面状态的下拉刷新也会受相应的影响。

    3.应用启动 黑白屏问题,大家都知道要设置的步骤
    1)写配置文件xx_splash_layer:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:opacity="opaque">
        <item android:drawable="@color/white"/>
        <item>
            <bitmap
                android:gravity="bottom"
                android:src="@drawable/xx_splash"/>
        </item>
    </layer-list>
    

    2)引入到theme:styles文件

    <resources>
    
        <!-- Base application theme. -->
        <style name="XXDocterAppTheme" parent="XXAppTheme">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/white</item>
            <item name="colorPrimaryDark">@color/white</item>
            <item name="colorAccent">#FF404769</item>
        </style>
    
        <!--解决启动白屏问题-->
        <style name="ThemeSplash" parent="XXDocterAppTheme">
            <item name="android:windowBackground">@drawable/xx_splash_layer</item>
        </style>
    </resources>
    

    3)在manifest文件中引入

       <activity android:name=".SplashScreenActivity"
                android:theme="@style/ThemeSplash">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    需要强调的是 一定不要忘记android:opacity="opaque" 属性的设置 ,不然问题依然存在。
    具体解释见:https://www.jianshu.com/p/ad4361d78222


    4.今天在重构首页的时候 希望把首页工作台的复杂逻辑拉出来 写到一个继承自LinearLayout的view 中 然后 首页主要展示首页的逻辑 需要addHead的地方直接就可以add这个view作为header 就好 结果遇到一个问题 代码如下

      public MyView(Context context) {
            super(context);
            this.mContext = context;
            myView = View.inflate(context, R.layout.xxh, null);
            initHeaderView();//view 控件初始化
        }
    

    结果没有报错,但是就是不显示当前view
    然后换个姿势:添加this.addView(myView);这句话 显示了 为啥呢?
    再换个姿势
    myView = View.inflate(context, R.layout.xxh, this); 也正常;
    再换个姿势
    myView= LayoutInflater.from(context).inflate(R.layout.xxh,this,true); 也ok

    myView= LayoutInflater.from(context).inflate(R.layout.xxh,this,false); 这个不行了

    好吧 看来是对LayoutInflater 理解不够深刻 学习下吧
    详见:https://www.jianshu.com/p/9fdbfcf9c857


    5.如何在fragment中轻松使用 onWindowFocusChanged 方法?
    1)第一步:

    public interface IOnFocusListenable {
       public void onWindowFocusChanged(boolean hasFocus);
    }
    

    2)第二步:

    public class MyFragment implements IOnFocusListenable {
        ....
        public void onWindowFocusChanged(boolean hasFocus) {
            ...
        }
    }
    
    

    3)第三步:

    public class MyActivity extends AppCompatActivity {
       @Override
       public void onWindowFocusChanged(boolean hasFocus) {
            super.onWindowFocusChanged(hasFocus);
    
            if(currentFragment instanceof IOnFocusListenable) {
                ((IOnFocusListenable) currentFragment).onWindowFocusChanged(hasFocus);
            }
        }
    }
    

    具体可见:https://stackoverflow.com/questions/30129984/how-to-get-the-onwindowfocuschanged-on-fragment


    1. view的可见性 分析:
      1)getHitRect 、 getDrawingRect 、 getLocalVisibleRect 和getGlobalVisibleRect
      https://blog.csdn.net/leunging/article/details/53083668
      https://blog.csdn.net/u012554768/article/details/49661117
      2)Android应用坐标系统全面详解
      https://blog.csdn.net/feizhixuan46789/article/details/50520197
      3)Android View的可见性检查方法
      https://blog.csdn.net/aikongmeng/article/details/72373748

    1. View.getViewTreeObserver 注意下这个方法
    2. 2019年1月15日: 在开发中遇到一个问题 :一个底部弹出框中包含了EditText控件,希望点击空白处的时候 dialog消失并且键盘收起,实际情况是 dialog 消失没问题, 但是键盘收起时好时坏,实现方式是用dialog的EditText发了postdelay ,但是并没有解决,后来就用了页面中另外一个常驻控件发了postdelay 去做键盘收起 就好使了, ok 划重点,这种需要postdelay 最好不要用dialog内控件 因为dialog 弹框dismiss掉后控件会直接为空 postdelay 方法会直接发不出去。

    9.开发中遇到了Toast 不弹出问题,百思不得其解 ,后来发现需要打开悬浮窗权限,现在好多绕过系统方法自定义Toast 解决问题的 还没尝试 尝试了再回来总结
    解决方案参考:https://tech.meituan.com/2018/03/29/toast-snackbar-replace.html


    1. android:descendantFocusability="blocksDescendants" 这个属性 的重要性:在recycleView中 设置header 的时候 给header 添加 这个属性 ,可以解决 “分页数据加载完了的时候,会自动向上滑动一段 “ 的问题 。

    11.在用fresco给图片设置圆角的基础上设置border 的时候发现 图片会有1px 的锯齿,如下图所示:


    image.png

    网上查了资料,可以加个overlay ,overlay可以是颜色 也可以是图片,由于底图不是纯色 ,这里颜色肯定搞不定了,于是想着找个1dp的底图来做overlay ,结果UI童鞋说这个不好切图,额。。。肿么办?
    后来又追踪了好多属性,发现还有个borderPadding ,于是设置了个borderPadding=1dp ok 锯齿消失了 ,如下图:


    image.png

    So Happy!


    持续更新~~

    相关文章

      网友评论

          本文标题:开发中遇到的问题

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