2021-07-17

做demo:

画画板 记事本 食物商城

使用kotlin开发完整项目

需要技术:

Navigation组件:https://blog.csdn.net/wangzhaung/article/details/103062735
safe args传值
ROOM DATABASE
Data bingding绑定适配
RecyclerView数据搜索、数据排序
LiveData
ViewModel
Repository
网格布局、瀑布布局
RecyclerView搜索
客户端-服务器端交互
Dagger-Hilt
Retrofit
Offline Cache离线缓存
kotlin Coroutines协程
LiveData

食物api:https://spoonacular.com/food-api

xml和项目关联:把layout的id给到主函数:setContentView(R.layout.activity_main)

**LinearLayout,RelativeLayout,ConstraintLayout
通过TextView在主函数获取xml的内容

一、用代码写控件

——在MainAcitivity中用代码写demo而不是design:
context中getResources方法


代码中获取属性

创建容器,需要传入context上下文

改变颜色
设置颜色
设置颜色

如果min SDK不符合版本,在Gradle Script——build.gradle更改即可(第二个)


更改min-SDK
设置颜色

代码中需要的是dp,但写的是px
dp=px*屏幕密度

东哥 12:01:39
class MainActivity : AppCompatActivity() {
    @SuppressLint("UseCompatLoadingForDrawables")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //创建一个容器 LinearLayout,RelativeLayout,ConstraintLayout
        var container = LinearLayout(this)
        //设置容器的尺寸 宽度和高度
        var mLayoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
        )
        container.layoutParams = mLayoutParams
        //设置排列方向
        container.orientation = LinearLayout.VERTICAL
        //设置颜色
        container.background = getDrawable(R.color.purple_200)
        //关联容器
        setContentView(container)

        //创建你一个LinearLayout容器 图片和标题
        var head = LinearLayout(this).apply {
            //布局参数
            layoutParams = LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
            )
            orientation = LinearLayout.HORIZONTAL
            background = getDrawable(R.color.white)
            weightSum = 2f
        }

        //添加图片
        ImageView(this).apply {
            //设置尺寸
            layoutParams = ViewGroup.LayoutParams(
                dp2px(120),dp2px(100))
            scaleType = ImageView.ScaleType.CENTER_CROP
            //设置图片
            setImageResource(R.drawable.dance)
            //添加到容器中
            head.addView(this)
        }

        //添加标题
        TextView(this).apply {
            //设置尺寸
            layoutParams = ViewGroup.MarginLayoutParams(
                dp2px(210),dp2px(100)).apply {
                    leftMargin = dp2px(30)
            }

            text = "参考消息网7月29日报道美国消费者新闻与商业频道网站近日发表美国退役四星上将、布鲁金斯学会会长约翰·艾伦和布鲁金斯学会治理研究中心副主任达雷尔·韦斯特的文章称,部署基于人工智能的武器有重大机遇,但也存在日益增加的重大威胁。虽然人工智能可以放大军事能力,但它也可能在本质上破坏稳定。文章摘编如下:\n" +
                    "\n" +
                    "美国最近派遣两个航母战斗群进入南海,以显示军事实力。这一举动是回应中国在南海水域举行军事演习。当中美这两个“超级大国”都在人工智能、远程成像和无人化武器系统方面发展先进技术能力之际,这场对峙加剧了全球紧张关系。重要的是,两国官员都应明白,新兴技术能够加快决策过程,但同时也会加大误判的风险。"
            setTextColor(getColor(R.color.black))
            //添加到容器中
            head.addView(this)
        }

        //将这个容器添加到外部容器中
        container.addView(head)
        
        //Activity 生命周期 跳转(自己的界面 系统) 传值
        
    }

    //将dp值转化为px
    fun dp2px(dp:Int):Int{
        Log.v("pxd","${resources.displayMetrics.density}")
        return (resources.displayMetrics.density * dp).toInt()
    }

    
}

东哥 15:02:50
class MainActivity : AppCompatActivity() {
    lateinit var container:ConstraintLayout

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        createContainer()
        setContentView(container)
        addChilds()
    }

    @SuppressLint("ResourceType")
    fun createContainer(){
        container = ConstraintLayout(this).apply {
            layoutParams = ConstraintLayout.LayoutParams(
                ConstraintLayout.LayoutParams.MATCH_PARENT,
                ConstraintLayout.LayoutParams.MATCH_PARENT
            )
            background = getDrawable(R.color.purple_200)
            id = resources.getInteger(R.id.mContainer)
        }
    }

    @SuppressLint("ResourceType")
    fun addChilds(){
        //图片
        ImageView(this).apply {
            layoutParams = ConstraintLayout.LayoutParams(
                dp2px(120),dp2px(100)).apply {
                    startToStart = resources.getInteger(R.id.mContainer)
                    topToTop = resources.getInteger(R.id.mContainer)
                leftMargin = dp2px(16)
                topMargin = dp2px(16)
            }
            setImageResource(R.drawable.dance)
            scaleType = ImageView.ScaleType.CENTER_CROP
            container.addView(this)
        }

        //标题
        //新闻内容
    }

    //将dp值转化为px
    fun dp2px(dp:Int):Int{
        Log.v("pxd","${resources.displayMetrics.density}")
        return (resources.displayMetrics.density * dp).toInt()
    }
}

二、Acitivity窗口

每一个容器都有LayoutParams
avtivity详解:https://www.jianshu.com/p/fb44584daee3

Acitivity的生命周期

BootLoader-》系统-》启动管理手机页面的进程-》SystemService!AcitivityManagerService-》Lauch-》调用onclick方法-》startApp-》ActivityThread-》创建application-》activity-》显示

lauch和relauch

ActivityClientRecord r,会记录上一次登入的记录

输出语句log:调试用,暴力输出:
v:Verbose,tag是用来过滤信息的,msg要输出的信息
i:Info
e: Error
w: Warn
响应用户的触摸事件:Down、Move、Up、Cancel

三、页面调转:

使用方法:onTouchEvent,motionEvent:

if(event.action== MotionEvent.ACTION_DOWN UP){
}
触摸方法

Intent意图
显示意图:当前程序内部的页面
隐式意图:跳转到其他系统或其他App的页面
在MainAcitivity:触摸一下跳转到SecondAcicitivity(下图)


首页

跳转界面

四、总结

手动创建控件(容器、子控件)
LinearLayout.LayoutParams
ConstraintLayout.LayoutParams

dp density密度 px

onCreate
onStart onRestart
onResume

onPause
onStop
onDestory

创建Activity
手动创建一个类继承于AppCompatActivity()
-重写onCreate方法
-创建layout文件
-关联xml文件
-manifest中注册

getResource(resource)获取系统的资源 文本,颜色,图片
getDrawable(id)
getColor(id)
getString(id)

触摸事件onTouchEvent(event:MotionEvent)
event.action == MotionEvent.ACTION_DOWN UP MOVE CANCEL

启动页面:startActivity-finish
intent:显示意图 (此,彼class.java)

Log.v("tag","内容")
Logcat日志查看 verbose error

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

推荐阅读更多精彩内容