安卓学习笔记之三:Android Studio_骰子案例(kotlin版本)

本文是学习youtube上Android Studio教程一个手机编程案例的实践。

一个简单的android程序,实现简单的摇骰子,只有一个按钮。

版本为Android Studio Hedgehog 2023。

原教程视频链接如下:

https://www.youtube.com/watch?v=B0hYgONuh4g&list=PLsEC4qT8YxBLvNJBs1a_hHd2iwSrHieKu&index=4

1. 创建一个新的项目 

 项目名为Dice Roller, 语言为kotlin, 选择合适的仿真设备。

 2 编译后成功,初步演示

编译成功 

主活动布局文件activity_main.xml

这里看到只有一个TextView,在屏幕中间显示Hello World!

主活动程序MainActivity.kt

MainActivity()类中OnCreate()方法启动函数SetContentView(),载入资源(res)文件包中的主活动布局文件activity_main.xml。

编辑主活动布局文件,拖动一个按钮button到中间。

TextView和Button是ConstraintLayout子项,可以在Attributes中调节按钮水平和垂直方向上的约束。

使用硬式码字串(HardCoded Text)存在告警

硬编码的字符串按钮,应该使用@字符串资源

直接在布局文件中硬编码文本属性是不好的,原因有几个:

  • 在创建配置变体(例如横向或纵向)时,必须重复实际文本(并在进行更改时保持最新状态)
  • 不能仅通过为现有的字符串资源添加新的翻译来将应用程序翻译为其他语言。有一些快速修复程序可以自动将这个硬编码的字符串提取到资源查找中。

使用quick-Fixes进行修正。 

写入按钮的文本,ROLL。

改变TextView文字的大小,选中 Hello Word,在attributes中搜索textsize,由14sp改为34sp,在Common Attributes清空文字,工具文字为“1”。

可以在activity_main.xml中看到TextView的如下变化。

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="34sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="1" />

 工具文字是为开发人员使用的,“1”不会显示到画面中。

3. 设计主活动程序,按ROLL,在其上部出现1~6随机数字。

在主活动程序MainActiivity.kt中增加代码,使用findViewByID找到Button的ID, 调用按钮的点击监听方法setOnClickListener(),采用Lambda表达式,设计骰子的蓝图类Dice() ,在TextView“1”的地方显示1~6的随机数。

修改后的MainActiivity.kt文件如下。

package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //本案例中使用findViewById找到ui
        /* Android 会自动将ID号码指派给应用程序的资源
        资源ID的形式为R.<type>.<name>
        对于View的ID <type>为id, 例如R.id.button
        *
         */
        val rollButton: Button = findViewById(R.id.button)
        rollButton.setOnClickListener {
            //建立新的Dice物件执行个体
            val dice = Dice(6)
            val diceRoll = dice.roll()
            val resultTextView: TextView = findViewById(R.id.textView)
            resultTextView.text = diceRoll.toString()
        }
    }
}
/*
*骰子蓝图 Class Dice
* 具有滚动的功能 fun roll()
 */
class Dice(val numSides: Int) {
    fun roll(): Int{
        return (1..numSides).random()
    }

}

 运行后的效果:

调用Toast.makeText()方法即可建立内含文字“Dice Roller!"的Toast, 建立新的Dice物件执行函数diceroll()

package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //本案例中使用findViewById找到ui
        /* Android 会自动将ID号码指派给应用程序的资源
        资源ID的形式为R.<type>.<name>
        对于View的ID <type>为id, 例如R.id.button
        *
         */
        val rollButton: Button = findViewById(R.id.button)
        rollButton.setOnClickListener {
            //调用Toast.makeText()即可建立内含文字“Dice Roller!"的Toast
            Toast.makeText(this,"Dice Roller!",Toast.LENGTH_LONG).show()
            rollDice()  //执行滚动功能
        }

    }
    private fun rollDice(){
        //建立新的Dice物件执行函数
        val dice = Dice(6)
        val diceRoll = dice.roll()
        val resultTextView: TextView = findViewById(R.id.textView)
        resultTextView.text = diceRoll.toString()

    }
}
/*
*骰子蓝图 Class Dice
* 具有滚动的功能 fun roll()
 */
class Dice(val numSides: Int) {
    fun roll(): Int{
        return (1..numSides).random()
    }

}

运行后的效果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值