实习笔记1

px dp sp 的区别

px 其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位
sp 同dp相似,还会根据用户的字体大小偏好来缩放
dp 虚拟像素,在不同的像素密度的设备上会自动适配

隐藏状态栏任务栏

1.PNG

在api30之前

getWindow().getDecorView().setSystemUIVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN)

api30后

WindowCompat.setDecorFitsSystemWindows(window, false)
WindowInsetsControllerCompat(window, window.decorView).let {
    it.hide(WindowInsetsCompat.Type.systemBars())
    //it.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH
}
  • androidx.core 依赖的版本至少1.5

设置导航栏,状态栏颜色

window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = Color.TRANSPARENT

fragment 生命周期

2.png

onCreateView 与onActivityCreated 的区别

onCreateView

每次创建、绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View组件。

onActivityCreated

当Fragment所在的Activity被启动完成后回调该方法。

  • 保存view的状态的时候需要用onActivityCreated
  • 访问父activity的view层的时候需要在onActivityCreated 方法里面做
  • 如果view是静态的,就可以在onCreateView之后取得view进行操作
  • 如果view是动态的,则需要在onActivityCreated后find

1 静态布局

1.1 View和ViewGroup

静态布局都是由View和ViewGroup继承而来。

静态布局树状图

  • View是所有的UI组件都要继承并实现的,一个View要在屏幕上占据一块矩形区域。
  • ViewGroup是一个容器,可以将View添加进ViewGroup中,ViewGroup可以对其内的View进行布局,ViewGroup可以添加其他的ViewGroup。
  • 所有的控件都是从View继承而来,ViewGroup是View的一个重要子类,绝大多数布局都是从ViewGroup继承而来。

1.3 六大布局

1.3.1 LinearLayout

line是线的意思,linear是线性的意思,这个布局就是线性布局。只能横着排,或者只能竖着排。
关键属性是orientation,这个是方向的意思。
这个有两个选项 vertical,horizontal。是不是觉得太长记不住呢,有一个简便的记忆方法,利用IDE的自动提示功能,只要记住第一个字母就可以了对吧,可以把h记作横(heng)这样就不会错了。

1.3.2 RelativeLayout

relative是相对的意思,这个布局是相对布局。
相对布局就是依据父元素和某元素进行相对布局。
有三种类型的属性:

属性值是true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中。
android:layout_alignParentBottom 位于父元素的下边缘
android:layout_alignParentTop 位于父元素的上边缘
android:layout_alignParentLeft 位于父元素的左边缘
android:layout_alignParentRight 位于父元素的右边缘
属性值是"@id/*“
android:layout_below 在某元素的下方
android:layout_above 在某元素的上方
andorid:layout_toRightOf 在某元素的右方
android:layout_toLeftOf 在某元素的左方
android:layout_alignBottom 和某元素下方对齐
android:layout_alignTop 和某元素上方对齐
android:layout_alignRight 和某元素右方对齐
android:layout_alignLeft 和某元素左方对齐
属性值是数值
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
android:layout_marginBottom 离某元素下边缘的距离
上面这两种是最常用的两种布局,基本能完成一些基本的布局了。

1.3.3 自定义布局

  • 自定义是对ViewGroup进行继承,一般要实现以下方法:

  • 重写onMeasure()方法对子View进行测量。在onMeasure中计算childView的测量值以及模式,以及设置自己的宽和高。

  • 重写onLayout()方法确定子View的位置,对所有childView进行定位(设置childView的绘制区域)。
    自定义ViewGroup是很有必要的,因为当官方给出的空间无法满足自己的需求时,就需要自己取定义一种布局了。

1.3.4 FrameLayout

框架布局,第一个控件放在最底层的左上角,然后后面的控件在左上角一层一层的覆盖上去。类似于Ps图层的样子。

1.3.5 TableLayout

表格布局,顾名思义,就是一个表格。
它遵循着以下结构:

<TableLayout>
    <TableRow>
    <!-在这里填充第一行的元素->
    </TableRow>
    <TableRow>
    <!-在这里填充第二行的元素->
    </TableRow>    
</TableLayout>

还有几个重要属性:

  • 写在TableLayout中的属性
    • android:stretchColumns 设置第几列为伸展(0表示第一列)
    • ndroid:shrinkColumns 设置第几列为收缩
    • android:collapseColumns 设置第几列为隐藏
  • 写在TableRow里的控件里的属性
    • android:layout_column 设置控件在第几列
    • android:layout_span 设置控件能跨多少列

1.3.6 AbsoluteLayout

绝对布局,已经被淘汰了的布局。

所有控件都要设置x,y坐标,使用绝对的布局。

android:layout_x //控件x坐标
android:layout_y //控件y坐标

1.4 控件

3.png

1.4.1 android自带控件

1.4.2 自定义控件

自定义控件有三种方法:

  1. 对现有控件进行扩展,继承控件后重写onDraw()方法,在回调父类方法前实现自己的逻辑。
  2. 通过组合来实现新的控件
  3. 重写View来实现全新的控件
@Override
protected void onDraw(Canvas canvas){
    //在回调之前实现自己逻辑。
    super.onDraw(canvas);
    //在回调之后实现自己逻辑。
}

2 动态布局

2.1 用类修改xml

可以使用findViewById找到想要进行接管的控件,然后再修改其中的属性,然后达到动态的目的。

2.2 动态生成

首先创建一个布局管理器,然后使用setContentView()将布局管理器绘制出来,之后再用addView()方法加入控件元素

Drawable类及XMLDrawable的使用

一.性质

可直接使用.png、.jpg、.gif、9.png等图片作为资源,也可使用多种XML文件作为资源。(就是这些资源都能生成Drawable对象)。并对XML文件作出相关处理

二.XMLDrawable

1.StateListDrawable(selector)

作用:StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而改变

组成:

根元素<selector/>,子元素<item/>
子元素<item/>的属性:android:color或android:drawable
android:state_xxx:状态

2.LayerDrawable(ps图层)

作用:可包含一个Drawable数组,系统会按照Drawable对象的数组顺序绘制,索引越大越被绘制在上层

根元素:<layer-list>  子元素:<item/>

子元素的属性:android:drawable 作为LayerDrawable的Drawable对象
android:id 为Drawable对象指定标识符
android:buttom|top...等 指定Drawable的绘制位置

3.ShapeDrawable
作用:设置一个基本的几何图形(矩形、圆形、线条灯)

根元素:<shape/>
根元素的属性:android:shape=["rectangle"|"oval"|"line"|"ring"]

子元素:
<corners/>:设置整体或者四个边角的弧度
<gradient/>:渐变(可选择渐变的角度但必须是45的倍数,默认为0,渐变的中心点,渐变的类型,渐变的半径和开始和终止的颜色)
<padding/>:内边距 (可以控制四周的边距)
<size/>:形状的大小 (设置形状的宽高)
<solid/>:单种颜色填充 
<stroke/>:绘制边框
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither=["true" | "false"]       //将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。
    android:shape=["rectangle" | "oval" | "line" | "ring"]//分别为矩形、椭圆、线、环。默认为矩形rectangle 
    android:innerRadius="integer"           // shape为ring时有效,内环半径
    android:innerRadiusRatio="float"        // shape为ring时有效,内环的厚度比,即环的图形宽度与内环半径的比例,按照这个比例计算内环半径,默认为3,可被innerRadius值覆盖
    android:thickness="integer"             // shape为ring时有效,环的厚度
    android:thicknessRatio="float"          // shape为ring时有效,环的厚度比,即环的图形宽度与环的厚度的比例,按照这个比例计算环的厚度,默认为9,可被thickness值覆盖
    android:tint="color"                    // 给shape着色
    android:tintMode=["src_in" | "src_atop" | "src_over" | "add" | "multiply" | "screen"] // 着色类型
    android:useLevel=["true" | "false"]     // 较少用,一般设为false,否则图形不显示。为true时可在LevelListDrawable使用
    android:visible=["true" | "false"] >
    <!-- 圆角 -->
    <corners
        android:radius="integer"            // 圆角半径,设置下面四个属性时,对应的位置属性会被覆盖
        android:topLeftRadius="integer"     // 左上角圆角半径
        android:topRightRadius="integer"    // 右上角圆角半径
        android:bottomLeftRadius="integer"  // 左下角圆角半径
        android:bottomRightRadius="integer" // 右下角圆角半径
        />
    <!-- 渐变 -->
    <gradient
        android:type=["linear" | "radial" | "sweep"]// 渐变类型,线性、放射性、扫描性;默认为线性
        android:angle="integer"             // 渐变角度,渐变类型为linear时有效;默认为0,从左至右渐变,角度逆时针方向计算,角度需要时45的整数倍数
        android:centerColor="integer"       // 渐变中间位置颜色
        android:startColor="color"          // 渐变开始位置颜色
        android:endColor="color"            // 渐变结束位置颜色
        android:centerX="float"             // 设置渐变中心的X坐标,取值区间[0,1],默认为0.5,即中心位置
        android:centerY="float"             // 设置渐变中心的Y坐标,取值区间[0,1],默认为0.5,即中心位置
        android:gradientRadius="integer"    // type为放射性渐变radial时有效,渐变的半径
        android:useLevel=["true" | "false"] // 与shape中该属性的一致
        />
    <!-- 内边距 -->
    <padding
        android:left="integer"              // 左边距
        android:top="integer"               // 上边距
        android:right="integer"             // 右边距
        android:bottom="integer"            // 下边距
        />
    <!-- 大小 -->
    <size
        android:width="integer"             // 图形宽度
        android:height="integer"            // 图形高度
        />
    <!-- 填充 -->
    <solid
        android:color="color"               // 图形的填充色
        />
    <!-- 描边 -->
    <stroke
        android:width="integer"             // 描边的宽度
        android:color="color"               // 描边的颜色
        android:dashWidth="integer"         // 虚线宽度
        android:dashGap="integer"           // 虚线间隔
        />
</shape>
  • 可设置画笔的颜色和粗细并设置每画一条线的长度和间距且必须两者都设置才有效

4.ClipDrawable
作用:从Drawable上截取一个"图片片段"

根元素:<clip>  不使用子元素。

根元素属性: 
android:drawable: 选定Drawable对象
android:clipOrientation:指定截取方向
android:gravity:从什么地方开始截取
  • 总结:选定图片并选择方向与位置截取图片

  • 使用:从java中获取ClipDrawable并用setLevel()改变截取大小 //setLevel()只能从0~10000

<!--res/drawable/test_clip.xml-->
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/start"
    android:clipOrientation="horizontal"
    android:gravity="center">
</clip>
<!--res/layout/activity_main.xml-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.chen.android.test.MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/test_clip"/>
</LinearLayout>
/*实现图片渐渐展开的效果*/
public class MainActivity extends AppCompatActivity {
    int data = 0;
    int what = 0X11;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView img = (ImageView)findViewById(R.id.imageView);
        //ImageView.getDrawable()获取的是当前控件里的图片,返回的是Drawable类型,还有说明Drawable对象可随意变成子对象并调用子对象的方法
        final ClipDrawable clipDrawable = (ClipDrawable)img.getDrawable();
        //创建Handler等待计时器传送的信息,使图片扩展
        final Handler mHandler = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == what){
                    clipDrawable.setLevel(data);//扩大截取的图片面积
                    data += 200;
                }

            }
        };
        //创建计时器
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (data >= 10000){
                    timer.cancel();
                }
                mHandler.obtainMessage(what).sendToTarget();
            }
        },0,300);
    }
}

5.AnimationDrawable
简介:放在res/anim下,支持逐帧动画和补间动画

根元素:<set>   根元素属性:android:interpolator="参数"
linear_interpolator:匀速变换 
accelerate_interpolar:加速变换
decelerate_interpolator:减速变换

android:shareInterpolator= "true|false" :是否让资源的interpolator与根元素相同

android:duration="时间":定义持续时间
子元素(同样可以设置duration)
<alpha>:设置开始和结束的透明度
<scale>:设置缩放的中心、开始的X,Y的尺寸和结束时X,Y的尺寸
<translate>:设置图片的开始位置和结束位置进行位移
<rotate>:设置旋转的中心、开始的角度和结束时候的角度
  • 注意:利用android:fillAfter="true|false":设置保留后的状态(哪个状态想保留就用这个,如果都像就放在set中)

  • 使用:利用AnimationUtils的静态方法loadAninmation(Context context,int resId)

<!--在res/anim/test_animtaion中-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true"
    android:fillAfter="true">

    <alpha android:fromAlpha="50.0"
           android:toAlpha="100.0"
           />
    <scale android:pivotX="50%"
           android:pivotY="50%"
           android:fromXScale="1.0"
           android:fromYScale="1.0"
           android:toXScale="1.5"
           android:toYScale="1.5"
           android:duration="3000"
           />
    <translate android:fromXDelta="30"
               android:toXDelta="300"
               android:fromYDelta="40"
               android:toYDelta="90"
        android:duration="3000"/>

</set>
/*实现动画*/
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView img = (ImageView)findViewById(R.id.imageView);

        /*利用工具类获取对象*/
        Animation animation= AnimationUtils.loadAnimation(this,R.anim.test_animation);
        /*将动画附加在图片上*/
        img.startAnimation(animation);
    }
}
4.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容