• Android开发基础——常用控件的使用方法


    TextView

    TextView可以说是Android中最简单的一个控件了,其主要用于在界面上显示一段文本信息。

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView
    7. android:id="@+id/textView"
    8. android:layout_width="match_parent"
    9. android:layout_height="wrap_content"
    10. android:text="This is TextView" />
    11. LinearLayout>

    比如上面的代码中,运行之后的结果为:

     虽然TextView文本的宽度是和屏幕一样宽的,但是显示出来并不觉得,这是因为TextView中的文字默认是居左上角对齐的。虽然TextView的宽度充满了整个屏幕,但是由于文字内容并不够长,所以看不出效果,这里可以修改文本内容的对齐方式:

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView
    7. android:id="@+id/textView"
    8. android:layout_width="match_parent"
    9. android:layout_height="wrap_content"
    10. android:gravity="center"
    11. android:text="This is TextView" />
    12. LinearLayout>

     运行结果为:

     上面的参数中,android:gravity就是用来指定文本的对齐方式,可选值有top/bottom/start/end/center,可以用|来同时指定多个值。这里指定的是center,效果等于center_vertical|center_horizontal,表示在垂直和水平方向都居中对齐。

    另外还可以修改文本的颜色和大小:

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView
    7. android:id="@+id/textView"
    8. android:layout_width="match_parent"
    9. android:layout_height="wrap_content"
    10. android:gravity="center"
    11. android:textColor="#00ff00"
    12. android:textSize="24sp"
    13. android:text="This is TextView" />
    14. LinearLayout>

    运行结果为:

     在上面的代码中,android:textColor表示的是文本的颜色,android:textSize表示的是文本的大小,文字大小的单位是sp,以使用户在系统中修改了文字显示尺寸时,应用程序中的文字大小也会跟着变化。

    Button

    Button这个控件之前都已经用过了:

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView
    7. android:id="@+id/textView"
    8. android:layout_width="match_parent"
    9. android:layout_height="wrap_content"
    10. android:gravity="center"
    11. android:textColor="#00ff00"
    12. android:textSize="24sp"
    13. android:text="This is TextView" />
    14. <Button
    15. android:id="@+id/button"
    16. android:layout_width="match_parent"
    17. android:layout_height="wrap_content"
    18. android:text="Button" />
    19. LinearLayout>

    比如上面的代码创建了一个按钮,运行结果为:

     虽然在Button的属性android:text中是Button,但是显示的却是大写的BUTTON,这是因为Android系统默认会将按钮上的英文字母全部转换为大写。如果需要保留指定的原始文字内容,可以修改代码为:

    1. <Button
    2. android:id="@+id/button"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:textAllCaps="false"
    6. android:text="Button" />

    运行结果为:

     而由于Button是交互式的控件,因此还可以在Activity中添加Button的监视器:

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. // lambda func
    7. }
    8. }
    9. }

    这里使用的是Java函数式API的形式,只需要在对应位置书写lambda表达式即可。

    同时也可以使用实现接口的方式来进行注册,代码为:

    1. class MainActivity : AppCompatActivity(), View.OnClickListener {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. }
    6. override fun onClick(v:View?) {
    7. when (v?.id) {
    8. R.id.button -> {
    9. // statement
    10. }
    11. }
    12. }
    13. }

    即实现接口,然后在对应的方法中接收对应的id,判断是哪个控件,然后做出响应。

    EditText

    EditText是程序用于和用户进行交互的另一个控件,其允许用户在控件中输入和编辑内容,并可以在程序中对这些内容进行处理。

    1. <EditText
    2. android:id="@+id/editText"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"/>

    运行程序结果为:

     在上面的结果显示中,输入字母的前部分,会存在输入提示,而在用户输入了内容之后,这些提示性阿文字就会消失。这种功能在Android中是非常容易实现的,甚至都不需要做任何逻辑控制,因为系统已经帮用户都处理好了。

    在上面的代码中,是没有android:text这个属性的,这里加上看一下:

    1. <EditText
    2. android:id="@+id/editText"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:text="Type something here" />

    结果为:

     从显示来看,这个属性的内容已经是输入好的,虽然能起到提示的作用,但用户却需要进行手动删除,将代码修改为:

    1. <EditText
    2. android:id="@+id/editText"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:hint="Type something here" />

     运行结果为:

     这里的显示就是隐藏式的,在用户要输入内容的时候,提示性文本会消失,而当文本框为空时,提示性文本又会出现。

    而当输入内容不断增多时,EditText会被不断拉长,这是因为EditText的高度指定的wrap_content,因此其总是能够包含其里面的内容,但当输入内容过多时,界面会变得不太好看:

    1. <EditText
    2. android:id="@+id/editText"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:hint="Type something here"
    6. android:maxlines="2"/>

     这样就会限制EditText的最大显示行数:

     而如果将EditText和Button相结合,比如通过点击按钮获取EditText中输入的内容:

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. val inputText = editText.text.toString()
    7. Toast.makeText(this, inputText, Toast.LENGTH_SHORT).show()
    8. }
    9. }
    10. }

    运行结果为: 

     在上面的代码中,在按钮点击事件中调用了EditText的getText方法获取输入内容,然后调用toString方法将其内容转换为字符串,最后使用Toast将输入的内容进行显示。

    ImageView

    ImageView是用于在界面上展示图片的一个控件,其可以让程序界面变得更加丰富。

    图片通常是放在drawable开头的目录下,并且要带上具体的分辨率。现在最主流的手机屏幕分辨率大多是xxhdpi的,因此在res目录下再新建一个drawable-xxhpi目录,然后在该目录下复制两张图片img_1.png和img_2.png。

    1. <ImageView
    2. android:id="@+id/imageView"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:src="@drawable/img_1"/>

    运行结果为:

     上面的代码中,使用android:layout_width和android:layout_height限制了图片的显示范围,保证了不管图片的尺寸,都可以进行完整的显示,而android:src属性则指示了显示的内容。

     而如果将ImageView和Button相结合,比如通过点击按钮更改ImageView显示内容:

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. imageView.setImageResource(R.drawable.img_2)
    7. }
    8. }
    9. }

    点击按钮后的结果为:

     ProgressBar

    ProgressBar用于在界面上显示一个进度条,表示程序正在加载一些数据。

    1. <ProgressBar
    2. android:id="@+id/progressBar"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"/>

    运行结果为:

     在按钮的点击事件中,可以通过getVisibility方法来判断ProgressBar是否可见,如果可见就将之隐藏,如果不可见就将ProgressBar进行显示。

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. if (progressBar.visibility == View.VISIBLE) {
    7. progressBar.visibility = View.GONE
    8. } else {
    9. progressBar.visibility = View.VISIBLE
    10. }
    11. }
    12. }
    13. }

    另外,还可以指定ProgressBar的样式:

    1. android:id="@+id/progressBar"
    2. android:layout_width="match_parent"
    3. android:layout_height="wrap_content"
    4. style="?android:attr/progressBarStyleHorizontal"
    5. android:max="100"/>

    同时修改代码为:

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. progressBar.progress = progressBar.progress + 10
    7. }
    8. }
    9. }

    运行结果为:

     上面代码修改了ProgressBar的显示样式,同时设定了进度条的最大值,然后在Activity中添加按钮的点击事件,即每点击一次,进度条前进10%。

    AlertDialog

    AlertDialog可以在当前界面弹出一个对话框,该对话框是置顶于所有界面元素之上的,能够屏蔽其它控件的交互能力,因为该控件一般用于提示一些非常重要的内容或警告信息。比如为了防止用户误删重要内容,可以在删除前弹出一个确认对话框。

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. button.setOnClickListener {
    6. AlertDialog.Builder(this).apply {
    7. setTitle("this is a Dialog")
    8. setMessage("Something important")
    9. setCancelable(false)
    10. setPositiveButton("OK") {dialog, which->}
    11. setNegativeButton("Cancel") {dialog, which->}
    12. show()
    13. }
    14. }
    15. }
    16. }

     在上面的代码中,首先通过AlertDialog.Builder构建了一个对话框,然后通过apply函数为该对话框设置了标题,内容,能够使用Back键关闭对话框等属性,然后调用setPositiveButton和setNegativeButton方法为对话框设置确定/取消按钮的点击事件,然后调用show方法显示对话框。

    运行结果为:

  • 相关阅读:
    PyTorch 被大量网友反馈,TorchRec 这一新库“诞生”且规模宏大
    【RuoYi-Vue-Plus】学习笔记 38 - OSS模块(八)V4.2.0+ 版本OSS文件上传流程
    stm32单片机个人学习笔记3(GPIO输出)
    输入电压转化为电流性 5~20mA方案
    通达信软件L2接口的委托队列有什么用?
    构建坚固防线:提升网站整体安防水平的有效途径
    web性能治理
    postman接口测试工具详解
    【Vue】Vue的部分语法规则
    计算机毕业设计之java+springboot基于vue的企业客户信息反馈平台
  • 原文地址:https://blog.csdn.net/SAKURASANN/article/details/126914008