Android 从零开始(一)[通俗易懂]

Android 从零开始(一)[通俗易懂]Activity在我以网页web角度来认为的:Activity就是界面Layout就是html布局java就是js进行各种dom数据操作style就是cssAndroidManifest.xml-清单文件也可以简称为「manifest文件」。清单文件非常重要,它告诉系统我们的app有哪些activity,用到了什么权限等等信息。如果要新建activity,需要在清单中注册。<applicationandroid:allowBackup=”true” and

大家好,又见面了,我是你们的朋友全栈君。

Activity

在我以网页web角度来认为的:

  • Activity就是界面
  • Layout就是html 布局
  • java就是js 进行各种 dom数据操作
  • style 就是css

AndroidManifest.xml – 清单文件

也可以简称为「manifest文件」。清单文件非常重要,它告诉系统我们的app有哪些activity,用到了什
么权限等等信息。
如果要新建activity,需要在清单中注册。

<application android:allowBackup="true" 
	 android:icon="@mipmap/ic_launcher"
	 android:label="@string/app_name" 
	 android:roundIcon="@mipmap/ic_launcher_round" 
	 android:supportsRtl="true" 
	 android:theme="@style/AppTheme"> 
	 <activity android:name=".MainActivity">  // MainActivity -Java 文件
	 	<intent-filter> 
	 		//app 进入的第一个界面
	 		<action android:name="android.intent.action.MAIN" />
	 		//app 的icon
	  		<category android:name="android.intent.category.LAUNCHER" />
	 	</intent-filter> 
	 </activity> 
</application>

Activity生命周期

其实就是一个栈

在这里插入图片描述

java

四种状态

在这里插入图片描述

四种状态对应的周期方法

在这里插入图片描述

java 流程图

在这里插入图片描述

个人总结:

  • 点开 app 进入 a页面: onCreate (创建)=>onStart(准备可见中)=>onResume(准备好了 立刻可见)
  • 离开 app: onPause(未完全消失)=>onStop(完全不可见)=>onDestroy(销毁)
  • 出现弹窗: onPause(未完全消失)
  • 弹窗消失: onResume(恢复立刻可见)
  • 切到b页面: onPause(未完全消失)=>onStop(完全不可见)
  • 返回: onRestart (重新启动)=>onStart(准备可见中)=>onResume(准备好了 立刻可见)

activity启动模式

  • standard

会重复添加 activity

在这里插入图片描述

  • singleTop

当前不处于栈顶就会被重复创建

在这里插入图片描述

  • singleTask

不会添加重复activity

在这里插入图片描述

  • singleInstance

不同的activity栈唯一

在这里插入图片描述

常用控件

  • TextView
web网页 就是div吧

属性比较简单 但注意:sp用来文字,dp布局

  • Button
    注意:
//先继承 点击原始事件
class MainActivity : AppCompatActivity(),View.OnClickListener
 // 多个button 点击事件
    override fun onClick(v: View?){ 
   
        when(v?.id){ 
   
            R.id.click_btn->{ 
   
                xxxxxxxxx
            }
        }
    }
  • EidtText

编辑框:有很多类型但是都很基础就不写了
注意:
获取文本内容:
.text.toString()

  • ImageView

图片容器

  • progress

进度条
默认加载圆形状
添加style:Horizontal 变长条进度条
max=“100”

  • AlertDialog

对话框
代码:

 AlertDialog.Builder(this).apply { 
   
                setTitle("这是一个对话框")
                setMessage("this is message")
                setPositiveButton("确定") { 
    _, _ ->
                    Toast.makeText(this@MainActivity, "确定被点击",Toast.LENGTH_LONG).show()
                }
                setNegativeButton("取消") { 
    _, _ ->
                    Toast.makeText(this@MainActivity, "取消被点击",Toast.LENGTH_LONG).show()
                }
				show()
            }

布局

  • 约束布局
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    案列:
    在这里插入图片描述
    重点:权重 均分
  • 线性布局

在这里插入图片描述

在这里插入图片描述

  • 相对布局
    在这里插入图片描述
  • 帧布局:FrameLayout

从左上角开始绘制 依次覆盖

在这里插入图片描述

  • TableLayout

在这里插入图片描述

  • 网格布局GridLayout
    在这里插入图片描述

在这里插入图片描述

其他布局内容:转载:Android——六大基本布局总结

组合控件 继承控件 自绘控件(高阶)

  • 组合控件
    创建一个新的layout xml文件 —

在这里插入图片描述
其内容代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/pink"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/back_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"
        android:textColor="@color/black"
        android:textSize="30sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"></TextView>


    <TextView
        android:id="@+id/title_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是标题"
        android:textColor="@color/black"
        android:textSize="40sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </TextView>
</androidx.constraintlayout.widget.ConstraintLayout>

将common_title引入其他xml文件中

    <include layout="@layout/common_title" />

就形成了公共的导航栏
在这里插入图片描述

  • 继承组件
    创建一个java控件类
    在这里插入图片描述
    代码:
package com.example.learn002

import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout

/** * 继承控件 */
class CommonTitleView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs),
    View.OnClickListener { 
   
    private var mBackOnClickListener: OnClickListener? = null
    private var title_text: TextView
    private var back_text: TextView

    init { 
   
        //加载布局
        LayoutInflater.from(context).inflate(R.layout.common_title, this)
        //找到控件
        title_text = findViewById(R.id.title_text)
        back_text = findViewById(R.id.back_text)
        back_text.setOnClickListener(this)
    }

    //设置点击事件
    override fun onClick(p0: View?) { 
   
        when (p0?.id) { 
   
            R.id.back_text -> { 
   
                //监听器
                mBackOnClickListener?.onClick(p0)
            }
        }

    }

    //设置监听器 返回
    fun setBackOnClickListener(backOnClickListener: OnClickListener) { 
   
        mBackOnClickListener = backOnClickListener
    }

    //设置标题
    fun setTitle(text: String) { 
   
        title_text.text = text
    }


}

使用:
layout文件中:

 <com.example.learn002.CommonTitleView
        android:id="@+id/common_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

java文件中:

 //继承控件
        val common_title = findViewById<CommonTitleView>(R.id.common_title)
        common_title.setTitle("这是标题")
        common_title.setBackOnClickListener{ 
   
            Log.d(TAG, "MainActivity==被点击")
            finish()
        }
  • 自绘控件(高阶)
    创建文件MyTextView
    在这里插入图片描述
    代码如下:
package com.example.learn002

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.util.AttributeSet
import android.widget.TextView

@SuppressLint("AppCompatCustomView")
class MyTextView(context: Context?, attrs: AttributeSet?) : TextView(context, attrs) { 
   
    //默认在文字下方有条下划线

    override fun onDraw(canvas: Canvas?) { 
   
        super.onDraw(canvas)
        // 笔 画布
        val paint = Paint()
        paint.setColor(Color.RED)
        paint.strokeWidth =5F
        canvas?.drawLine(0F,height.toFloat(),width.toFloat(),height.toFloat(),paint)
    }
}

直接使用:

  <com.example.learn002.MyTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义控件"
        android:textSize="47sp"
        android:layout_marginTop="20dp"
        app:layout_constraintTop_toBottomOf="@+id/common_title"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/text1"
        />

效果:
在这里插入图片描述

  • RecyclerView
    引入依赖:
    在这里插入图片描述

动画

  • 帧动画
    直接上代码:
    drawable 文件
    在这里插入图片描述
    layout:
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:background="@drawable/frame"
    android:layout_height="match_parent">

</RelativeLayout>

activity文件使用:

package com.example.my_notification;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;

import androidx.annotation.Nullable;

public class FrameActivity extends Activity { 
   
    private boolean flag = true;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.animation_frame);
        RelativeLayout relativeLayout = findViewById(R.id.rl);
        AnimationDrawable anim = (AnimationDrawable) relativeLayout.getBackground();
        relativeLayout.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View view) { 
   
                if (flag == true) { 
   
                    anim.start();
                    flag = false;
                }else{ 
   
                    anim.stop();
                    flag = true;
                }
            }
        });
    }
}

  • 补间动画

在这里插入图片描述
详细看文档

Fragment

Fragment 与 activity 通信

BUNDLE 方案

  public void onClick(View v) { 
   
        switch (v.getId()) { 
   
            case R.id.btn1:
                //Bundle 保存数据的类
                Bundle bundle = new Bundle();
                bundle.putString("message", "我喜欢android");
                ItemFragment tfg = new ItemFragment();
                tfg.setArguments(bundle);
                replaceFragment(tfg);
                break;
            case R.id.btn2:
                replaceFragment(new MapsFragment());
        }
    }

    // 动态切换Fragment
    private void replaceFragment(Fragment fragment) { 
   

        // fragmentManager 管理类
        FragmentManager fragmentManager = getSupportFragmentManager();
        // 管理类 动作
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.framelayout, fragment);
        // fragment 添加到同一个栈中
        fragmentTransaction.addToBackStack(null);
        // 执行
        fragmentTransaction.commit();
    }

java中类与类通信方案 接口

其他方案:eventBus LiveData 观察者模式 发布订阅模式

  • Fragment 生命周期

Service 服务

  • 生命周期
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148581.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 史上最简单的 IntelliJ IDEA 教程「建议收藏」

    史上最简单的 IntelliJ IDEA 教程「建议收藏」温馨提示:本教程的GitHub地址为「intellij-idea-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。1简介  IntelliJIDEA(简称IDEA),是Java语言开发的集成环境,IDEA在业界被公认为最好的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(Git、SVN、GitHub…

  • vb程序设计教程第4版龚沛曾 实验答案解析

    vb程序设计教程第4版龚沛曾 实验答案解析这里只是个人对书中题目的解答,并不代表最优代码。仅供参考。有哪里错误或者不足的地方还望指出,Thanks♪(・ω・)ノ以及不要脸地求探讨求点赞。嘿嘿这里使用的是《vb程序设计教程(第四版)——龚沛曾》:实验3(主要考察分支选择结构。1—7考察select和if语句,8用到choose函数,9—11以控件option和check为主)3.1:OptionExpl…

  • SpringBoot线程池使用

    SpringBoot线程池使用一、线程池管理配置类@Configuration@EnableAsyncpublicclassExecutorConfig{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(ExecutorConfig.class);@BeanpublicExecutorasyncTaskS…

  • grep 命令详解_grep命令详解

    grep 命令详解_grep命令详解一:grep命令的基本概念和用途grep命令是linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。在一个或多个文件中搜素字符串模式,如果字符串模式包括空格,也必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到标准输出(stdout),不影响原文件内容。grep也可以用于shell脚本,因为grep通过返回一个状态值来说明搜索的结果,如果模式搜索成功,则返回0;如果搜索不成功,则返回1;如果搜索的文件不存在,则返回2;我们利用这些返回值就可以进行一些自动化的文

  • Linux 镜像文件ISO下载

    Linux 镜像文件ISO下载Linux镜像文件ISO下载地址:https://archive.kernel.org/centos-vault/6.1/isos/x86_64/

  • jQuery+HTML5弹出创意搜索框层

    效果体验:http://hovertree.com/texiao/jquery/26/本效果适用于移动设备,可以使用手机等浏览效果。代码下载:http://hovertree.com/h/bjaf/e

    2021年12月21日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号