温习Android基础知识——《第一行代码(第三版)》读书笔记 Chapter 4 UI开发

第四章:软件也要拼脸蛋,UI开发的点点滴滴

> 本章实践知识较多,理论知识较少

常用控件的使用方法

这里直接贴上代码
布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="24sp"
        android:textColor="#00ff00"
        android:text="This is TextView"/>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:text="button"/>

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="2"
        android:hint="想写啥写啥" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1"/>

    <Button
        android:id="@+id/changeImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="换张图片"/>

    <Button
        android:id="@+id/changeProgressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="控制进度条"/>

    <ProgressBar
        android:id="@+id/progessBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"/>

    <Button
        android:id="@+id/alert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="alert"/>



</LinearLayout>

活动代码:

class MainActivity : AppCompatActivity(), View.OnClickListener {
    private var imageId = 1
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//        使用函数式API的方式注册监听器
//        button.setOnClickListener {
//            Toast.makeText(this,textview.text.toString(),Toast.LENGTH_SHORT).show()
//        }
        button.setOnClickListener(this)
        changeImage.setOnClickListener(this)
        changeProgressBar.setOnClickListener(this)
        alert.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when(v?.id){
            R.id.button -> {
                val str = editText.text.toString()
                if (str == ""){
                    Toast.makeText(this,"输入不得为空",Toast.LENGTH_SHORT).show()
                }else{
                    textview.text = str
                    editText.text = null
                }
//                Toast.makeText(this,textview.text.toString(),Toast.LENGTH_SHORT).show()
            }
            R.id.changeImage -> {
                if(imageId==1){
                    imageId++
                    imageView.setImageResource(R.drawable.img_2)
                }else{
                    imageId=1
                    imageView.setImageResource(R.drawable.img_1)
                }


            }
            R.id.changeProgressBar ->{
//                if (progessBar.visibility == View.VISIBLE){
//                    progessBar.visibility = View.GONE
//                }else{
//                    progessBar.visibility = View.VISIBLE
//                }
                if (progessBar.progress==100){
                    progessBar.progress=0
                }else{
                    progessBar.progress += 10
                }
            }
            R.id.alert -> {
                AlertDialog.Builder(this).apply {
                    setTitle("我是来警告你的")
                    setMessage("很重要的事")
                    setCancelable(false)
                    setPositiveButton("好的"){
                        dialog, which ->
                    }
                    setNegativeButton("取消"){
                        dialog, which ->
                    }
                    show()
                }
            }
        }
    }
}

布局

布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从未编写出精美的界面。

线性布局 LinearLayout

将它所包含的控件在线性方向上依次排列

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

相对布局 RelativeLayout

通过相对定位的方式让控件出现在布局的任何位置
可以相当于父布局,也可相对于一同级控件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Button 3"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/button3"
        android:layout_toStartOf="@id/button3"
        android:text="Button 1"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/button3"
        android:layout_toEndOf="@id/button3"
        android:text="Button 2"/>



    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/button3"
        android:layout_toStartOf="@id/button3"
        android:text="Button 4"/>

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/button3"
        android:layout_toEndOf="@id/button3"
        android:text="Button 5"/>

</RelativeLayout>

帧布局 FrameLayout

所有控件都会默认放在布局左上角

约束布局

见作者的两篇博客:
Android新特性介绍,ConstraintLayout完全解析
ConstraintLayout已经2.0了,你不来了解一下吗?

自定义控件

所有控件都是直接或间接继承自View的,所有的布局都是直接或间接继承自ViewGroup的。View是Android中最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件。

引入布局

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

创建自定义控件

新建一个类继承自LinearLayout,之后即可在布局文件中使用该控件。

class TitleLayout(context: Context, attrs:AttributeSet) : LinearLayout(context, attrs){
    init {
        LayoutInflater.from(context).inflate(R.layout.title, this)

        titleBack.setOnClickListener{
        	//as 用于强制类型转换
            val acativity = context as Activity
            acativity.finish()
        }

        titleEdit.setOnClickListener {
            Toast.makeText(context,"Edit",Toast.LENGTH_SHORT).show()
        }
    }

}

ListView

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚出屏幕。

RecycleView

增强版的ListView,不仅可以实现和它同样的效果,还优化了很多不足。

9-Patch 图片

一种被特殊处理过的png图片,能够指定哪些区域可以拉伸,哪些区域不可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《现代信号处理第三版课后习题pdf》是一本辅助学习《现代信号处理》第三版的习题集。作为一本信号处理的教材,它帮助学生理解和掌握信号处理的基本理论和方法。 该习题集包含了与《现代信号处理第三版》中相应章节配套的习题,涵盖了信号的表示与处理、线性时不变系统、频域分析与滤波、采样与模数转换、多通道信号与线性滤波、时频表示与分析等方面的内容。 通过解答这些习题,学生可以巩固课堂上的知识,加深对信号处理理论的理解,并通过实际操作提高分析和解决实际问题的能力。此外,习题集还提供了答案和解析,学生可以通过对答案的核对来检验自己的学习进展,并及时纠正错误。 对于学习信号处理的学生来说,这本习题集是一个非常有价值的学习工具。它不仅帮助学生进行复习和巩固知识,而且提供了实际问题的解决思路,培养了学生的问题分析和解决问题的能力。 总之,《现代信号处理第三版课后习题pdf》是一本对课堂教学进行补充和加强的教材。通过反复练习习题,学生可以提高对信号处理理论和方法的掌握程度,为将来的实际工作打下坚实的基础。 ### 回答2: 《现代信号处理第三版》是一本经典的信号处理教材,课后习题pdf是该教材的一个附属学习资料。这个pdf文件包含了各章节的习题与解答,是供学生们进行练习和巩固所学知识的一个重要资源。 首先,在这个pdf中,我们可以找到大量与信号处理相关的习题。这些习题分布在课本中各个章节之后,贯穿了整个学习过程。通过完成这些习题,可以更好地巩固课本中所学的概念、理论和方法,并深入理解信号处理的基本原理与技术。 其次,这个习题pdf中还提供了每个习题的详细解答。学生们可以通过参考这些解答,验证自己的答案是否正确,纠正可能存在的错误,并进一步加深对习题中涉及的知识点的理解和掌握。 此外,这个习题pdf对于自学者来说也是一个很好的辅助工具。自学者可以通过习题pdf进行自我测试,自我评估自己的学习进度和掌握情况,并及时发现和填补知识上的漏洞。 总的来说,《现代信号处理第三版》课后习题pdf是一份很好的学习资源。它能够帮助学生们更好地学习信号处理知识,巩固所学内容,并提升自己的解题能力和理论水平。无论是课堂学习还是自学探索,这份习题pdf都是一份非常有价值的参考资料,对于提高信号处理水平具有重要作用。 ### 回答3: 《现代信号处理第三版》课后习题.pdf是一本与现代信号处理相关的教材,适用于对信号处理有一定基础的学生或者从事相关领域的工程师。本书的习题是由书中的知识点延伸而来,旨在加深学生对信号处理理论与应用的理解。以下是对该习题pdf的回答: 该习题pdf共包含多道选择题、简答题和计算题。选择题是对于信号处理的基础知识进行测试,考察学生对信号、系统、频谱等概念的理解。简答题则要求学生阐述信号处理的一些基本原理、方法和应用,并能结合实例进行解答,考察学生的综合能力。计算题则要求学生运用信号处理算法和公式进行计算和推导,考察学生的计算和分析能力。 对于这些习题,学生可以通过翻看课本、复习课堂笔记以及查阅相关参考资料来进行解答。在解答过程中,可以参考例题和习题的解析,以及对应章节的知识点进行温习和复习。同时,可以与同学或者老师进行讨论,互相帮助和交流,共同提高对信号处理的理解和应用能力。 通过认真解答该习题pdf,学生可以巩固信号处理的基本概念,加深对信号处理算法和方法的理解,并提高对信号处理应用的把握能力。同时,通过做题的过程,学生也能够培养自己的分析和解决问题的能力,为日后研究和应用信号处理打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值