前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 从零开始(一)[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-07-02 17:38:25
3870
发布2022-07-02 17:38:25
举报
文章被收录于专栏:全栈程序员必看

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

Activity

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

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

AndroidManifest.xml – 清单文件

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

代码语言:javascript
复制
<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
代码语言:javascript
复制
web网页 就是div吧

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

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

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

  • ImageView

图片容器

  • progress

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

  • AlertDialog

对话框 代码:

代码语言:javascript
复制
 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文件 —
在这里插入图片描述
在这里插入图片描述

其内容代码:

代码语言:javascript
复制
<?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文件中

代码语言:javascript
复制
    <include layout="@layout/common_title" />

就形成了公共的导航栏

在这里插入图片描述
在这里插入图片描述
  • 继承组件 创建一个java控件类
在这里插入图片描述
在这里插入图片描述

代码:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
 <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文件中:

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

代码如下:

代码语言:javascript
复制
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)
    }
}

直接使用:

代码语言:javascript
复制
  <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:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<?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文件使用:

代码语言:javascript
复制
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 方案

代码语言:javascript
复制
  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 服务

  • 生命周期

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Activity
  • AndroidManifest.xml – 清单文件
  • Activity生命周期
  • activity启动模式
  • 常用控件
  • 布局
  • 组合控件 继承控件 自绘控件(高阶)
  • 动画
  • Fragment
  • Service 服务
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档