Android基础知识再次理解

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述Android基础知识再次理解相关的知识,希望能为你提供帮助。
 
一、平时日常总结
1.Intent的使用
       

Android基础知识再次理解

文章图片

      补充:FlAG_ACTIVITY_CLEAN_TOP : 类似于singal task的使用
【Android基础知识再次理解】2.延迟函数的使用
  Utils.runOnUiThreadDelay
3.  FragmentPagerAdapter和FragmentStatePagerAdapter区别
相同点:两者都会保持当前item(即fragment)和前后的item的状态。显示当前item的同时,Adapter会提前初始化后一个item,并把当前item的前一个item保存在内存中。
不同点:FragmentPagerAdapter会保留页面的状态,并不会完全销毁掉;FragmentStatePagerAdapter会完全销毁滑动过去的item,当需要初始化的时候,会重新初始化页面。
如何选择:当Viewpager中fragment数量多的时候用FragmentStatePagerAdapter,反之则用FragmentPagerAdapter
4.跨模块编译使用的方法
   
Android基础知识再次理解

文章图片

            在values目录下创建这个文件,它会在编译时候把所有的ids都会放在一起来编译的
  5.动态获取组件的位置
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mOperationView.getLayoutParams();
layoutParams.bottomMargin = marginBottom;
mOperationView.setLayoutParams(layoutParams);

 6.对图片的缩放的使用

          setScaleX : 尤其在recycleview里面使用
7.解决库之间的依赖
configurations {
compile.exclude module: \'kuaishou-app-logsdk-proto-nano\'
all*.exclude group:\'kuaishou\', module: \'kuaishou-app-logsdk-proto-nano\'

 8.3D展示界面以及id名称
https://www.jianshu.com/p/8ea577c60865

9.对Activity的状态栏、导航栏的适配
https://blog.csdn.net/mirkowug/article/details/88715051
https://www.cnblogs.com/ldq2016/p/6824396.html
10.动态修改空间的位置和编译使用的命令
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) tvTitle.getLayoutParams();

layoutParams.topMargin = 60;

tvTitle.setLayoutParams(layoutParams);

./gradlew assembleRelease
./gradlew assembleDebug


 

 
二、控件的介绍
1.  expandablelistview :    可实现二级列表条目显示功能
Android基础知识再次理解

文章图片

2.DrawerLayout :  显示界面和侧拉一并使用
Android基础知识再次理解

文章图片

注意事项 :android:layout_gravity , 第二三个控件这个属性一定要设置
Android基础知识再次理解

文章图片

  3.SwipeRefreshLayout :  下拉刷新控件
       
Android基础知识再次理解

文章图片
 
4.shape :  用于给控件作为背景
        
Android基础知识再次理解

文章图片
   
             
Android基础知识再次理解

文章图片

5.selector : 状态选择器
             
Android基础知识再次理解

文章图片

6.Style的风格定义
            < !--背景颜色及和透明程度-->    
            < item  name="android:windowBackground"> @android:color/transparent< /item>    
            < !--是否去除标题  -->    
            < item  name="android:windowNoTitle"> true< /item>    
            < !--是否去除边框-->    
            < item  name="android:windowFrame"> @null< /item>    
            < !--是否浮现在activity之上-->    
            < item  name="android:windowIsFloating"> true< /item>    
            < !--是否模糊-->    
            < item  name="android:backgroundDimEnabled"> false< /item>  
            < !--允许activitytransition转场动画-->
          < item name="android:windowActivityTransitions"> true< /item>
         
          windowTranslucentStatus :  此时该页面可以拉伸到顶部状态栏,并且定义顶部状态栏透明
          true : 表明状态栏不能修改
          false: 表明状态栏能修改
          windowTranslucentNavigation : 此时页面的导航栏设置为透明颜色
          true : 表明底部导航栏不能修改
          false : 表明底部导航栏可以修改
          fitsSystemWindows : 系统会为该view设置paddingTop,距离顶部一定距离 
7.app做签名的使用
Android基础知识再次理解

文章图片
   
Android基础知识再次理解

文章图片

8. 自定义view 的规则
从上(起点)到下(终点),从左(起点)到右(终点)的规则
       
Android基础知识再次理解

文章图片

红色的箭头坐标为(0,0) 右下角的坐标为(720,1080 ---> 这个是代表手机屏幕的分辨率)
往右为正,往左为负;往下为正,往上为负
    9. AlertDialog自定义的setView于setContentVIew区别以及案例
(1). 区别 :setContentView需要在dialog.show之后使用,而setView则是在dialog.show之前使用。所以,当我们需要后续更新dialog的view界面的时候,可以使用setContentView更方便。
(2).    setContentView的用法 : 
AlertDialog dialog=new AlertDialog.Builder(this).create();
                  View layout = LayoutInflater.from(this).inflate(R.layout.dialog, null);
                  dialog.show();  
            dialog.setContentView(layout);
                --------------------------------------------------------
  setView的用法 :
                  AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
View layout = LayoutInflater.from(this).inflate(R.layout.dialog, null);
builder.setView(layout);
AlertDialog dialog = builder.create();
//展示
dialog.show();

10. EditView的字段添加和删除
删除:

KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL); edittext.dispatchKeyEvent(event);

增加:

  int index = edittext.getSelectionStart();
          Editable editable = chathomeSend.getText();
    editable.insert(index, icon);

11.动态实现圆private GradientDrawable getRoundRectDrawable(int radiu, int color){

float[] radius = {0, 0, radiu, radiu, radiu, radiu, 0, 0};
GradientDrawable drawable=new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setGradientType(GradientDrawable.RECTANGLE);
drawable.setCornerRadii(radius);
drawable.setColor(color);
return drawable;
}
12.16进制转换为10进制的颜色转换
Color.parseColor("#00CCFF")

13.进度条的样式使用
https://www.jianshu.com/p/8f3db94d7efe转圈圈显示、播放进度条显示

三、app性能优化问题
1.如何定位.so文件被哪个类依赖
1.把已有app拖进到AS工程中,查看你需要的处理的.so文件
2.去根目录下查找.gradle文件(这个会被隐藏掉,需要把它显示出来),查找.so库,找到对应的库,进入它的所在的目录
3.在它目前前面会对应这jar包,然后解析jar包,就可以知道是哪个类再调用了
4.资源文件的较少
5.混淆
6.代码的删除

 


 

               

 

 
 
 
 
     

    推荐阅读