Android开发初体验

这篇具有很好参考价值的文章主要介绍了Android开发初体验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建项目geoquiz
选择EmptyActivity
编程语言选择Kotlin

修改app/src/main/java/MainActivity.kt

package com.bignerdranch.android.geoquiz

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*

class MainActivity : AppCompatActivity() {

    private lateinit var trueButton:Button
    private lateinit var falseButton:Button

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

        trueButton = findViewById(R.id.true_button)
        falseButton = findViewById(R.id.false_button)

        trueButton.setOnClickListener{
            view: View ->
            //do something
            Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT).show()
        }

        falseButton.setOnClickListener{
            view:View->
            //do somethng
            Toast.makeText(this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show()
        }
    }
}

修改app/src/main/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical" >
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:padding="24dp"
              android:text="@string/question_text" />
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/true_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/true_button"/>

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/false_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/false_button"/>
    </LinearLayout>
</LinearLayout>

修改app/src/main/res/values/strings.xml

<resources>
    <string name="app_name">GeoQuiz</string>
    <string name="question_text">问题1</string>
    <string name="true_button">是</string>
    <string name="false_button">否</string>
    <string name="correct_toast">正确</string>
    <string name="incorrect_toast">错误</string>
</resources>

设置AVD模拟器,运行项目

添加更多的题目

新增app/src/main/java/Question.kt

package com.bignerdranch.android.geoquiz

import androidx.annotation.StringRes

data class Question(@StringRes val textResId:Int,val answer:Boolean)

修改app/src/main/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:tools="http://schemas.android.com/tools"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="24dp"
            android:id="@+id/question_text_view"
            tools:text="@string/question_1"/>
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/true_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/true_button"/>

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/false_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/false_button"/>
    </LinearLayout>

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/next_button"
            style="?android:attr/buttonBarButtonStyle"
            android:id="@+id/next_button"/>
</LinearLayout>



修改app/src/main/res/values/strings.xml

<resources>
    <string name="app_name">GeoQuiz</string>
    <string name="question_1">问题1</string>
    <string name="question_2">问题2</string>
    <string name="question_3">问题3</string>
    <string name="question_4">问题4</string>
    <string name="next_button">下一题</string>
    <string name="true_button">是</string>
    <string name="false_button">否</string>
    <string name="correct_toast">正确</string>
    <string name="incorrect_toast">错误</string>
</resources>

修改app/src/main/java/MainActivity.kt

package com.bignerdranch.android.geoquiz

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*

class MainActivity : AppCompatActivity() {

    private lateinit var trueButton:Button
    private lateinit var falseButton:Button
    private lateinit var nextButton:Button
    private lateinit var questionTextView: TextView

    private val questionBank = listOf(
        Question(R.string.question_1,true),
        Question(R.string.question_2,false),
        Question(R.string.question_3,true),
        Question(R.string.question_4,false),
    )

    private var currentIndex = 0

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

        trueButton = findViewById(R.id.true_button)
        falseButton = findViewById(R.id.false_button)
        nextButton = findViewById(R.id.next_button)
        questionTextView = findViewById(R.id.question_text_view)

        trueButton.setOnClickListener{
            view: View ->
            //Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT).show()
            checkAnswer(true)
        }

        falseButton.setOnClickListener{
            view:View->
            //Toast.makeText(this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show()
            checkAnswer(false)
        }

        nextButton.setOnClickListener{
            currentIndex = (currentIndex + 1) % questionBank.size
            updateQuestion()
        }

        updateQuestion()

    }

    private fun updateQuestion(){
        val questionTextResId = questionBank[currentIndex].textResId
        questionTextView.setText(questionTextResId)
    }

    private fun checkAnswer(userAnswer:Boolean){
        val correctAnswer = questionBank[currentIndex].answer
        val messageResId = if(userAnswer == correctAnswer){
            R.string.correct_toast
        }else{
            R.string.incorrect_toast
        }

        Toast.makeText(this,messageResId,Toast.LENGTH_SHORT).show()
    }
}

运行项目

添加图标资源

Activity的生命周期

引入Jetpack库的ViewModel

为什么需要ViewModel

Jetpack库

jetpack官方

一个界面对应一个Activity,下面创建第二个界面,用于显示当前问题的答案

先打开res/values/strings.xml文件,要用的所有字符串资源

<resources>
    <string name="app_name">GeoQuiz</string>
    <string name="question_1">问题1</string>
    <string name="question_2">问题2</string>
    <string name="question_3">问题3</string>
    <string name="question_4">问题4</string>
    <string name="next_button">下一题</string>
    <string name="true_button">是</string>
    <string name="false_button">否</string>
    <string name="correct_toast">正确</string>
    <string name="incorrect_toast">错误</string>

    <string name="warning_text">确认操作吗?</string>
    <string name="show_answer_button">显示答案</string>
    <string name="cheat_button">作弊!</string>
    <stinrg name="judgment_toast">作弊是错误的</stinrg>
</resources>

创建新的activity至少涉及三个文件:Kotlin类文件XML 布局文件manifest 文件。 这 三个文件关联密切,搞错了就有大麻烦。强烈建议使用IDEA的新建 activity向导功能。

Android开发初体验,Android,android
Android开发初体验,Android,android
使用向导操作后会自动添加相应的res/layout/activity_cheat.xml文件和app/src/main/java/CheatActivity.kt文件

下面开始构建UI

修改res/layout/activity_cheat.xml文件内容

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:tools="http://schemas.android.com/tools"
              android:gravity="center"
              android:orientation="vertical"
              tools:context=".CheatActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="24dp"
            android:id="@+id/warning_text_view"
            tools:text="@string/warning_text"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="24dp"
            android:id="@+id/answer_text_view"
            tools:text="回答"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/show_answer_button"
            android:text="@string/show_answer_button"/>
</LinearLayout>

接着检查一下app/main/manifest.xml配置文件中是否声明了 CheatActivity(向导操作默认会有)

内容大概如下

        <activity
                android:name=".CheatActivity"
                android:exported="false"/>

在默认布局中添加作弊!按钮(app/src/main/res/layout/activity_main.xml)

加入如下代码块

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cheat_button"
            style="?android:attr/buttonBarButtonStyle"
            android:id="@+id/cheat_button"/>

完整代码如下

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:tools="http://schemas.android.com/tools"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="24dp"
            android:id="@+id/question_text_view"
            tools:text="@string/question_1"/>
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/true_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/true_button"/>

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/false_button"
                style="?android:attr/buttonBarButtonStyle"
                android:id="@+id/false_button"/>
    </LinearLayout>

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cheat_button"
            style="?android:attr/buttonBarButtonStyle"
            android:id="@+id/cheat_button"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/next_button"
            style="?android:attr/buttonBarButtonStyle"
            android:id="@+id/next_button"/>
</LinearLayout>

修改MainActivity.kt加入cheatButton的控制处理代码

package com.bignerdranch.android.geoquiz

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*

class MainActivity : AppCompatActivity() {

    private lateinit var trueButton:Button
    private lateinit var falseButton:Button
    private lateinit var nextButton:Button
    private lateinit var cheatButton: Button
    private lateinit var questionTextView: TextView

    private val questionBank = listOf(
        Question(R.string.question_1,true),
        Question(R.string.question_2,false),
        Question(R.string.question_3,true),
        Question(R.string.question_4,false),
    )

    private var currentIndex = 0

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

        trueButton = findViewById(R.id.true_button)
        falseButton = findViewById(R.id.false_button)
        nextButton = findViewById(R.id.next_button)
        cheatButton = findViewById(R.id.cheat_button)
        questionTextView = findViewById(R.id.question_text_view)

        trueButton.setOnClickListener{
            view: View ->
            //Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT).show()
            checkAnswer(true)
        }

        falseButton.setOnClickListener{
            view:View->
            //Toast.makeText(this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show()
            checkAnswer(false)
        }

        nextButton.setOnClickListener{
            currentIndex = (currentIndex + 1) % questionBank.size
            updateQuestion()
        }

        cheatButton.setOnClickListener{
            //do something
        }

        updateQuestion()

    }

    private fun updateQuestion(){
        val questionTextResId = questionBank[currentIndex].textResId
        questionTextView.setText(questionTextResId)
    }

    private fun checkAnswer(userAnswer:Boolean){
        val correctAnswer = questionBank[currentIndex].answer
        val messageResId = if(userAnswer == correctAnswer){
            R.string.correct_toast
        }else{
            R.string.incorrect_toast
        }

        Toast.makeText(this,messageResId,Toast.LENGTH_SHORT).show()
    }
}

接着来看看如何启动CheatActivity

一个activity启动另一个activity最简单的方式是使用startActivity(Intent)函数

        cheatButton.setOnClickListener{
            val intent = Intent(this,CheatActivity::class.java)
            startActivity(intent)
        }

使用intent extra

CheatActivity.kt中,为extra数据信息新增键值对中的键

private const val EXTRA_ANSWER_IS_TRUE = "com.bignerdranch.android.geoquiz.answer_is_strue"

CheatActivity.kt代码如下

package com.bignerdranch.android.geoquiz

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

private const val EXTRA_ANSWER_IS_TRUE = "com.bignerdranch.android.geoquiz.answer_is_strue"

class CheatActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_cheat)
    }

    companion object {
        fun newIntent(packageContext: Context, answerIsTrue: Boolean): Intent {
            return Intent(packageContext,CheatActivity::class.java).apply {
                putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue)
            }
        }
    }
}

在MainActivity的按钮监听器中使用newIntent()函数,修改MainActivity.kt文章来源地址https://www.toymoban.com/news/detail-611929.html


到了这里,关于Android开发初体验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索Android多屏互动技术:构建无缝交互体验

    在当前移动设备和智能家居应用中,多屏互动技术已经成为一个备受关注的话题。随着移动设备(如智能手机、平板电脑)和智能家居设备的普及,用户对于多屏协同工作、娱乐和生活体验需求日益增加,多屏互动技术也得到了广泛的关注和应用。 多屏互动技术旨在实现不同

    2024年03月09日
    浏览(57)
  • 面试笔记:Android 架构岗,一次4小时4面的体验

    作者:橘子树 此次面试一共4面4小时,中间只有几分钟间隔。对持续的面试状态考验还是蛮大的。 关于面试的心态,保持悲观的乐观主义心态比较好。面前做面试准备时保持悲观,尽可能的做足准备。面后积极做复盘,乐观的接受最终结果。 切忌急于下结论,哪怕面试当场

    2024年02月13日
    浏览(42)
  • Android13冻结进程分析:如何提高设备性能和用户体验

    本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗。 文章讨论了如何合理分配资源,包括CPU、内存等,以提高设备性能和用户体验。此外,文章还提到了冻结进程对应用程序线程的影

    2024年02月14日
    浏览(49)
  • Material Design:为你的 Android 应用提供精美的 UI 体验

    介绍 Material Design 概念:介绍 Material Design 是 Google 推出的一种设计语言,用于创建现代、美观、直观且一致的用户界面。解释 Material Design 的基本原则,包括材料元素、动画、颜色和排版等。 Material Design UI 元素:介绍常用的 Material Design UI 元素,如卡片、按钮、文本字段、图

    2024年02月01日
    浏览(40)
  • AR 体验的“后浪,Android源码的Binder权限是如何控制

    △ 左边没有遮挡功能的“喵星人”在空间里穿越,缺乏真实感,右侧开启遮挡功能的“喵星人”则逼真地藏在了 而有了 Depth API,虚拟物体可以在现实世界找到自己的位置,和环境良好互动,让我们一起看一些优秀的使用案例。 “遮挡”掉不真实 让精彩上线 开发了 Five Nig

    2024年04月17日
    浏览(37)
  • 在线体验 Windows XP、7、8、10、12,及Android、Ubuntu、macos等系统

    大家好,我是玄武,一个互联网黑科技软件好奇的玩家。偶尔跟大家更新各种免费手机软件、各种好玩有趣的功能福利、高效率工具! 只有你想不到,没有我找不到 各种操作系统 在线体验 近日,一位热心网友在他的博客搜集了大量在线体验操作系统的网站,其中包含IBM P

    2024年02月03日
    浏览(37)
  • 《花雕学AI》20:ChatGPT使用之体验评测AI EDU的网页版+桌面端+Android+App store组合

    最近准备出门,要去新疆哈密参加活动,一直在寻找手机上可用的AI移动端。昨天在网上偶然找到了AI EDU(这个不是 MSRA 创立的人工智能开源社区),其链接是:https://ai.aigcfun.com,今天就尝试做个相关体验与学习的记录。打开首页如下: 引言: 人工智能聊天机器人 ChatGPT 是

    2024年02月03日
    浏览(53)
  • Android开发-Android开发环境搭建(Android Studio详细安装教程,适合新手)

    01 Android开发工具 Android Studio Android Studio是谷歌推出的一个Android集成开发工具, 基于 IntelliJ IDEA .类似Eclipse ADT, Android Studio提供了集成的Android开发工具用于开发和调试 架构组成 。基于Gradle的构建支持 。Android专属的重构和快速修复 。提示工具以捕获性能、可用性、版本兼容性

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包