飞道的博客

第二天——基本UI组件

422人阅读  评论(0)

  组件是Android程序设计的基本组成单元,通过组件可以高效的开发Android应用程序。

一、文本类组件

Android中提供了一些与文本显示、输入相关的组件,通过这些组件可以显示或者输入文本。其中用于显示的组件为文本框组件,使用Test View类表示;用于编辑的组件为编辑框组件,用Edit View类表示。Edit Text是Test View的子类。

1 文本框

Test View支持的常用XML属性如下:

Android:autoLink 用于指定是否将指定格式的文本转为可单击的超链接形式,其属性值有none、web、Email、phone、map、all
Android:drawableBottom 用于在文本框内文本的底端绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:drawableLeft 用于在文本框内文本的左侧绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:drawableLStart 用于在文本框内文本的左侧绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:drawableLRight 用于在文本框内文本的右侧绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:drawableLEnd 用于在文本框内文本的右侧绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:drawableLTop 用于在文本框内文本的顶端绘制指定图像,该图像是可以放在res/mipmap目录下的图片,通过“@mipmap/文件名”设置
Android:gravity 用于设置文本框文本的对齐方式,属性值有TOP、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal,这些属性值可以同时指定,之间同 |  竖线隔开。
Android:hint 用于设值文本为空时,默认显示的提示文本。
Android:inputType 用于指定当前文本框显示的文本类型,其可选值有textPassword、testEmailAddress、phone、date等,这些属性值可以同时指定,之间同 |  竖线隔开。
Android:singleLine 用于指定文本框是否为单行模式,属性值为Boolean值,但设置为true时,文本框不会换行,当文本框中的文本超过一行时,超出的部门就会被省略,用....代替。
Android:text 用于指定该文本框显示的内容,可以直接在属性中指定,也可以在res/value/string.xml文件中定义文本常量的方式。
Android:textcolor 用于指定文本框内文本的颜色。其属性值可以是#rgb、#argb、#rrgggbb、#aarrggbb格式指定。
Android:textSize

用于指定文本框文本的大小,属性值有代表大小的数值和单位组成,其单位格式可以是dp、px、sp、in等

Android:width 用于指定文本框的宽度,其单位可以是dp、px、pt、sp、in等
Android:height 用于指定文本框的高度,其单位可以是dp、px、pt、sp、in等

例如:实现一个QQ聊天的纪律


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. android:paddingBottom= "16dp"
  7. android:paddingRight= "16dp"
  8. android:paddingLeft= "16dp"
  9. android:paddingTop= "16dp"
  10. android:columnCount= "6"
  11. tools:context= ".MainActivity">
  12. <TextView
  13. android:id= "@+id/tesView1"
  14. android:layout_width= "243dp"
  15. android:layout_height= "wrap_content"
  16. android:layout_row= "0"
  17. android:layout_column= "1"
  18. android:layout_columnSpan= "4"
  19. android:layout_gravity= "end"
  20. android:layout_marginRight= "5dp"
  21. android:layout_marginBottom= "20dp"
  22. android:maxWidth= "180dp"
  23. android:text= "你好,我叫小明,很高兴认识你"
  24. android:textColor= "#16476B"
  25. android:textSize= "18sp" />
  26. <ImageView
  27. android:id= "@+id/tx"
  28. android:layout_width= "54dp"
  29. android:layout_height= "30dp"
  30. android:layout_row= "0"
  31. android:layout_column= "5"
  32. android:layout_columnSpan= "1"
  33. android:layout_gravity= "top"
  34. android:src= "@drawable/tx" />
  35. <ImageView
  36. android:id= "@+id/tx1"
  37. android:layout_width= "54dp"
  38. android:layout_height= "30dp"
  39. android:layout_row= "1"
  40. android:layout_column= "0"
  41. android:layout_gravity= "top"
  42. android:src= "@drawable/tx" />
  43. <TextView
  44. android:id= "@+id/tesView2"
  45. android:layout_width= "243dp"
  46. android:layout_height= "wrap_content"
  47. android:layout_row= "1"
  48. android:layout_column= "1"
  49. android:layout_columnSpan= "4"
  50. android:layout_gravity= "end"
  51. android:layout_marginRight= "5dp"
  52. android:layout_marginBottom= "20dp"
  53. android:maxWidth= "180dp"
  54. android:text= "你好,我叫小非,也很高兴认识你"
  55. android:textColor= "#16476B"
  56. android:textSize= "18sp" />
  57. </GridLayout>

2 编辑框

       由于EditText类是TextView的子类,所以TextView中的所有属性EditText都支持,需要注意的是,在EditText组件中,Android:inputType属性可以控制输入框的显示类型。例如要添加一个密码框,可以将inputType属性设置为textPassword。

     在屏幕中添加了编辑框之后,还需要获取编辑框中输入的内容,可以通过编辑框组件提供的getText方法实现。使用该方法时,首先需要获取到编辑框组件,然后再调用getText()方法。


  
  1. EditText et=findviewById(R.id.login);
  2. String loginText=et.getText().tostring();

例:实现QQ说说页面。


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. android:paddingBottom= "16dp"
  7. android:paddingRight= "16dp"
  8. android:paddingLeft= "16dp"
  9. android:paddingTop= "16dp"
  10. android:orientation= "vertical"
  11. android:background= "#EAEAEA"
  12. tools:context= ".MainActivity">
  13. <EditText
  14. android:layout_width= "382dp"
  15. android:layout_height= "wrap_content"
  16. android:layout_marginBottom= "10dp"
  17. android:background= "#FFFFFF"
  18. android:hint= "说点什么吧....."
  19. android:inputType= "textMultiLine"
  20. android:lines= "6"
  21. android:padding= "5dp" />
  22. <TextView
  23. android:layout_width= "wrap_content"
  24. android:layout_height= "51dp"
  25. android:text= "添加照片"
  26. android:textSize= "28sp"
  27. android:textColor= "#767676"
  28. android:background= "#FFFFFF"
  29. android:padding= "6sp"
  30. />
  31. </LinearLayout>

二、按钮类组件

按钮Bottom时TextView的子类,所以TextView支持的属性Buttom都是支持的。

1 普通按钮

例:实现开心消消乐的授权登录按钮。

(1)在res/drawable目录上新建shape资源文件,在文件中绘制圆角矩形,并设置文字与按钮边界的间距。


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--设置形状为圆角矩形-->
  3. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shape= "rectangle">
  5. <!--设置填充颜色为蓝色-->
  6. <solid android:color="#1FBAF3"/>
  7. <!--设置4个角的弧形半径-->
  8. <corners android:radius="5dp"/>
  9. <!--设置文字与按钮边界的间隔-->
  10. <padding
  11. android:left= "15dp"
  12. android:right= "15dp"
  13. android:top= "15dp"
  14. android:bottom= "15dp"/>
  15. </shape>

(2)编写activity_main.xml文件


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app= "http://schemas.android.com/apk/res-auto"
  4. xmlns:tools= "http://schemas.android.com/tools"
  5. android:layout_width= "match_parent"
  6. android:layout_height= "match_parent"
  7. android:background= "#EFEFF4"
  8. android:orientation= "vertical"
  9. android:paddingLeft= "16dp"
  10. android:paddingTop= "16dp"
  11. android:paddingRight= "16dp"
  12. android:paddingBottom= "16dp"
  13. tools:context= ".MainActivity">
  14. <ImageView
  15. android:layout_width= "393dp"
  16. android:layout_height= "499dp"
  17. android:scaleType= "fitStart"
  18. android:src= "@drawable/kx" />
  19. <Button
  20. android:id= "@+id/button"
  21. android:layout_width= "393dp"
  22. android:layout_height= "wrap_content"
  23. android:background= "@drawable/shape"
  24. android:text= "授权并登录"
  25. android:textColor= "#FFFFFF" />
  26. </LinearLayout>

(3)在MainActivity文件中为按钮添加监听事件


  
  1. package com.xiaomi.kaixinxiaoxiaole;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.Toast;
  7. public class MainActivity extends AppCompatActivity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. Button button = findViewById(R.id.button); //通过Id获取布局按钮
  13. //为布局按钮添加监听事件
  14. button.setOnClickListener( new View.OnClickListener() {
  15. @Override
  16. public void onClick(View v) {
  17. Toast.makeText(MainActivity. this, "您已经授权登录", Toast.LENGTH_SHORT).show();
  18. }
  19. });
  20. }
  21. }

2 图片按钮

     图片按钮与普通按钮的使用方法基本相同,图片按钮用<ImageButton>标记定义,并且可以为其指定Android:src属性,用于设置要显示的图片。

    重要属性说明:

      Android:src  属性:用于指定按钮上显示的图片

    Android:scaleType   属性:用于指定图片的缩放方式。其属性

属性值 描述
matrix 适应matrix(矩阵)方式进行缩放
fitXY 对图片横向、纵向独立缩放,使得图片完全适用于ImageButton,图片的纵横比可能回改变
fitStart 保持纵横比缩放图片,直到图片完全显示在ImageButton中,缩放完的图片放在ImageButton的左上角。
fitCenter 保持纵横比缩放图片,直到图片完全显示在ImageButton中,缩放完的图片放在ImageButton的中央。
fitEnd 保持纵横比缩放图片,直到图片完全显示在ImageButton中,缩放完的图片放在ImageButton的右上方。
Center

将图片放在ImageButton中央,但不进行任何缩放。

centerCrop 保持纵横比缩放图片,使得图片能完全覆盖ImageButton
centerInside 保持纵横比缩放图片,使得ImageButton能够完全显示该图片

例:实现开心消消乐开始游戏的按钮 


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app= "http://schemas.android.com/apk/res-auto"
  4. xmlns:tools= "http://schemas.android.com/tools"
  5. android:layout_width= "match_parent"
  6. android:layout_height= "match_parent"
  7. android:background= "@drawable/kxx"
  8. android:orientation= "vertical"
  9. android:paddingLeft= "16dp"
  10. android:paddingTop= "16dp"
  11. android:paddingRight= "16dp"
  12. android:paddingBottom= "16dp"
  13. android:gravity= "bottom|center_horizontal"
  14. tools:context= ".MainActivity">
  15. <ImageButton
  16. android:id= "@+id/start"
  17. android:layout_width= "239dp"
  18. android:layout_height= "132dp"
  19. android:background= "#0000"
  20. android:src= "@drawable/paly1"
  21. android:layout_marginTop= "10dp"/>
  22. </LinearLayout>

  
  1. package com.xiaomi.kaixinxiaoxiaole;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.WindowManager;
  7. import android.widget.Button;
  8. import android.widget.ImageButton;
  9. import android.widget.Toast;
  10. public class MainActivity extends Activity {
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. //设置全屏的代码
  16. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  17. ImageButton button = findViewById(R.id.start); //通过Id获取图片布局按钮
  18. //为布局按钮添加监听事件
  19. button.setOnClickListener( new View.OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. Toast.makeText(MainActivity. this, "您单击了开始游戏按钮", Toast.LENGTH_SHORT).show();
  23. }
  24. });
  25. }
  26. }

3  单选按钮

       在默认情况下,单选按钮显示为一个圆形图标,并且在该图标旁边放置一些说明性的文字。在程序中一般将多个单选按钮设置在图片组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮后,该按钮组中的其他按钮就会被自动取消选中状态。

通过<RadioButton>在XML布局文件中添加单选按钮的基本语法格式如下:


  
  1. <RadioButton
  2. android:layout_width= "wrap_content"
  3. android:layout_height= "wrap_content"
  4. android:id= "@+id/rb2"
  5. android:text= "B:100"
  6. android:textSize= "28sp" />

       RadioButton组件的Android:checked属性用于指定选中状态,其中属性值为true时,表示选中,默认值为false。通常情况下,RadioButton组件需要与RadioGroup组件一起使用,组成一个单选按钮组,在XML布局文件文件中,RadioGroup组件的基本格式如下:


  
  1. <RadioGroup
  2. android:id= "@+id/rg"
  3. android:layout_width= "wrap_content"
  4. android:layout_height= "wrap_content">
  5. <RadioButton
  6. android:layout_width= "wrap_content"
  7. android:layout_height= "wrap_content"
  8. android:id= "@+id/rb1"
  9. android:text= "A:125"
  10. android:textSize= "28sp" />
  11. <RadioButton
  12. android:layout_width= "wrap_content"
  13. android:layout_height= "wrap_content"
  14. android:id= "@+id/rb2"
  15. android:text= "B:100"
  16. android:textSize= "28sp" />
  17. </RadioGroup>

     在屏幕中添加单选按钮组后,还需要获取单选按钮组中的选中项的值,通常存在以下两种情况:

    (1)在改变单选按钮组的值时获取

      在改变单选按钮组的值时获取选中的单选按钮的值,首先需要获取单选按钮组,然后在为其添加OnCheckedChangeListener,并在OnCheckedChanged方法中根据参数checkedId获取被选中的单选按钮,通过getText()方法获取单选按钮对应的值。


  
  1. RadioGroup radioGroup= findViewById(R.id.rg); //通过布局ID获取单选按钮组
  2. radioGroup.setOnCheckedChangeListener( new RadioGroup.OnCheckedChangeListener() { //为单选按钮组提供事件监听器
  3. @Override
  4. public void onCheckedChanged(RadioGroup group, int checkedId) {
  5. RadioButton radioButton=findViewById(checkedId); //根据参数checkedId获取选中的单选按钮
  6. if (radioButton.getText().equals( "B:100")){
  7. Toast.makeText(MainActivity. this, "正确",Toast.LENGTH_LONG).show();
  8. } else { //错误消息提示框
  9. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity. this); //创建一个builder用来发送信息
  10. builder.setMessage( "错误,正确是100");
  11. builder.setPositiveButton( "确定", null).show(); //单击确定消失
  12. }
  13. }
  14. });

   (2)单选其他按钮时获取

       单选其他按钮获取选中项的值,首先需要在该按钮的单击事件监听器的OnClick()方法中,通过for循环语句遍历当前单选按钮组,并根据被遍历到的单选按钮的isChecked()方法判断该按钮是否被选中,当被选中时,通过单选按钮的getText()方法获取对应的值。


  
  1. button=findViewById(R.id.button1); //通过布局ID获取布局提交按钮
  2. rg=findViewById(R.id.rg); //通过布局ID获取单选按钮组
  3. button.setOnClickListener( new View.OnClickListener() { //为提交按钮设置单击事件监听器
  4. @Override
  5. public void onClick(View v) {
  6. for ( int i = 0; i < rg.getChildCount(); i++) {
  7. RadioButton radioButton = (RadioButton) rg.getChildAt(i); //根据索引值获取单选按钮
  8. if (radioButton.isChecked()){ //判断单选按钮是否被选中
  9. if (radioButton.getText().equals( "B:100")){
  10. Toast.makeText(MainActivity. this, "正确",Toast.LENGTH_LONG).show();
  11. } else { //错误消息提示框
  12. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity. this); //创建一个builder用来发送信息
  13. builder.setMessage( "错误,正确是100");
  14. builder.setPositiveButton( "确定", null).show(); //单击确定消失
  15. }
  16. break;
  17. }
  18. }
  19. }
  20. });

例:实现在屏幕上添加的逻辑推理题,要求在单选按钮组显示备选答案。


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width= "match_parent"
  4. android:layout_height= "match_parent"
  5. android:orientation= "vertical"
  6. android:paddingBottom= "16dp"
  7. android:paddingTop= "16dp"
  8. android:paddingLeft= "16dp"
  9. android:paddingRight= "16dp">
  10. <TextView
  11. android:layout_width= "wrap_content"
  12. android:layout_height= "wrap_content"
  13. android:text= "以下按钮等于100的哪个?"
  14. android:textSize= "28sp" />
  15. <RadioGroup
  16. android:id= "@+id/rg"
  17. android:layout_width= "wrap_content"
  18. android:layout_height= "wrap_content">
  19. <RadioButton
  20. android:layout_width= "wrap_content"
  21. android:layout_height= "wrap_content"
  22. android:id= "@+id/rb1"
  23. android:text= "A:125"
  24. android:textSize= "28sp" />
  25. <RadioButton
  26. android:layout_width= "wrap_content"
  27. android:layout_height= "wrap_content"
  28. android:id= "@+id/rb2"
  29. android:text= "B:100"
  30. android:textSize= "28sp" />
  31. <RadioButton
  32. android:layout_width= "wrap_content"
  33. android:layout_height= "wrap_content"
  34. android:id= "@+id/rb3"
  35. android:text= "C:75"
  36. android:textSize= "28sp" />
  37. <RadioButton
  38. android:layout_width= "wrap_content"
  39. android:layout_height= "wrap_content"
  40. android:id= "@+id/rb4"
  41. android:text= "D:50"
  42. android:textSize= "28sp" />
  43. </RadioGroup>
  44. <Button
  45. android:id= "@+id/button1"
  46. android:layout_width= "wrap_content"
  47. android:layout_height= "wrap_content"
  48. android:text= "提交"/>
  49. </LinearLayout>

  
  1. package com.xiaomi.tuili;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.app.AlertDialog;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.RadioButton;
  8. import android.widget.RadioGroup;
  9. import android.widget.Toast;
  10. public class MainActivity extends AppCompatActivity {
  11. Button button; //定义提交按钮
  12. RadioGroup rg; //定义按钮组
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. button=findViewById(R.id.button1); //通过布局ID获取布局提交按钮
  18. rg=findViewById(R.id.rg); //通过布局ID获取单选按钮组
  19. button.setOnClickListener( new View.OnClickListener() { //为提交按钮设置单击事件监听器
  20. @Override
  21. public void onClick(View v) {
  22. for ( int i = 0; i < rg.getChildCount(); i++) {
  23. RadioButton radioButton = (RadioButton) rg.getChildAt(i); //根据索引值获取单选按钮
  24. if (radioButton.isChecked()){ //判断单选按钮是否被选中
  25. if (radioButton.getText().equals( "B:100")){
  26. Toast.makeText(MainActivity. this, "正确",Toast.LENGTH_LONG).show();
  27. } else { //错误消息提示框
  28. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity. this); //创建一个builder用来发送信息
  29. builder.setMessage( "错误,正确是100");
  30. builder.setPositiveButton( "确定", null).show(); //单击确定消失
  31. }
  32. break;
  33. }
  34. }
  35. }
  36. });
  37. }
  38. }

4  复选框

       在默认情况下,复选框显示为一个方块图标,并且在该图标盘放置一些说明性的文字,与单选框不同的是,复选框可以进行多选设置,每一个复选框都提供“选中”和“不选中”两种状态。

复选框<CheckBox>在XML文件中的格式如下:


  
  1. <CheckBox
  2. android:layout_width= "wrap_content"
  3. android:layout_height= "wrap_content"
  4. android:text= "选我"
  5. android:id= "@+id/two"/>

      由于复选框中可以选中多项,所以为了确定用户时候选择了某一项,还需要为每一项提供一个事件监听器。


  
  1. final CheckBox checkBox=findViewById(R.id.one); //通过布局ID获取复选框按钮
  2. checkBox.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { //为复选框添加监听事件
  3. @Override
  4. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  5. if (checkBox.isChecked()){ //判断复选框是否被选中
  6. String string = checkBox.getText().toString(); //获取复选框的值
  7. Toast.makeText(MainActivity. this,string,Toast.LENGTH_LONG).show(); //显示该值
  8. }
  9. }
  10. });

例:实现开心消消乐的授权登录页面。


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. android:orientation= "vertical"
  7. tools:context= ".MainActivity">
  8. <ImageView
  9. android:layout_width= "match_parent"
  10. android:layout_height= "162dp"
  11. android:src= "@mipmap/denglv"
  12. android:layout_marginBottom= "15dp"/>
  13. <TextView
  14. android:layout_width= "wrap_content"
  15. android:layout_height= "wrap_content"
  16. android:text= "登录需要获取以下权限"
  17. android:textColor= "#FFF44336"
  18. android:textSize= "25sp"
  19. android:layout_gravity= "center"
  20. android:layout_marginBottom= "5dp"/>
  21. <CheckBox
  22. android:id= "@+id/checkbox1"
  23. android:layout_width= "wrap_content"
  24. android:layout_height= "wrap_content"
  25. android:text= "获取你的公开信息"
  26. android:textSize= "20sp"
  27. android:checked= "true"
  28. android:layout_marginBottom= "5dp"
  29. />
  30. <CheckBox
  31. android:id= "@+id/checkbox2"
  32. android:layout_width= "wrap_content"
  33. android:layout_height= "wrap_content"
  34. android:text= "寻找你的共同好友"
  35. android:textSize= "20sp"
  36. android:checked= "true"
  37. android:layout_marginBottom= "5dp"
  38. />
  39. <CheckBox
  40. android:id= "@+id/checkbox3"
  41. android:layout_width= "wrap_content"
  42. android:layout_height= "wrap_content"
  43. android:text= "访问通讯录"
  44. android:textSize= "20sp"
  45. android:checked= "true"
  46. android:layout_marginBottom= "5dp"
  47. />
  48. <Button
  49. android:id= "@+id/bt"
  50. android:layout_width= "match_parent"
  51. android:layout_height= "wrap_content"
  52. android:background= "#009688"
  53. android:text= "登录"
  54. android:textSize= "25sp"
  55. android:layout_marginBottom= "5dp"/>
  56. <Button
  57. android:id= "@+id/bt2"
  58. android:layout_width= "match_parent"
  59. android:layout_height= "wrap_content"
  60. android:text= "取消"
  61. android:textSize= "25sp"
  62. />
  63. </LinearLayout>

  
  1. package com.xiaomi.xiaxoaiolelogin;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.CheckBox;
  7. import android.widget.Toast;
  8. public class MainActivity extends AppCompatActivity {
  9. Button button; //定义登录按钮
  10. CheckBox checkBox1,checkBox2,checkBox3; //定义三个复选框按钮
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. button=findViewById(R.id.bt); //获取登录ann
  16. checkBox1=findViewById(R.id.checkbox1); //获取复选框按钮1
  17. checkBox2=findViewById(R.id.checkbox2); //获取复选框按钮2
  18. checkBox3=findViewById(R.id.checkbox3); //获取复选框按钮3
  19. button.setOnClickListener( new View.OnClickListener() { //为登录按钮添加监听器
  20. @Override
  21. public void onClick(View v) {
  22. String string= ""; //保存选中的值
  23. if (checkBox1.isChecked()){ //如果复选框1被选中
  24. string+=checkBox1.getText().toString();
  25. }
  26. if (checkBox2.isChecked()){ //如果复选框2被选中
  27. string+=checkBox2.getText().toString();
  28. }
  29. if (checkBox3.isChecked()){ //如果复选框3被选中
  30. string+=checkBox3.getText().toString();
  31. }
  32. //显示被选中的值
  33. Toast.makeText(MainActivity. this,string,Toast.LENGTH_LONG).show();
  34. }
  35. });
  36. }
  37. }

三  日期时间类组件

       在Android中提供了一些日期和时间相关的组件,常用的组件有日期选择器、时间选择器、计时器等,其中日期选择器使用DatePicker类表示,时间选择器常用TimePicker类表示,计时器使用Chronometer表示。其中日期选择器DatePicker类和时间选择器TimePicker类继承Framelayout类,Framelayout类继承ViewGroup类,ViewGroup类继承View类。计时器Chronometer继承Text View类,Text View类继承View类。

1 日期选择器   

  通过一个具体的实例来演示  


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app= "http://schemas.android.com/apk/res-auto"
  4. xmlns:tools= "http://schemas.android.com/tools"
  5. android:layout_width= "match_parent"
  6. android:layout_height= "match_parent"
  7. android:orientation= "vertical"
  8. tools:context= ".MainActivity">
  9. <DatePicker
  10. android:id= "@+id/datepicker"
  11. android:layout_width= "wrap_content"
  12. android:layout_height= "wrap_content"
  13. android:layout_gravity= "center"/>
  14. </LinearLayout>

  
  1. package com.xiaomi.datepicker1;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.widget.DatePicker;
  5. import android.widget.Toast;
  6. import java.util.Calendar;
  7. public class MainActivity extends AppCompatActivity {
  8. int year, month, day; //定义年月日
  9. DatePicker datePicker; //定义日期选择器
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. datePicker = findViewById(R.id.datepicker); //通过Id获取日期选择器
  15. //创建一个日期对象,获取当前的年月日
  16. Calendar calendar = Calendar.getInstance();
  17. year = calendar.get(Calendar.YEAR);
  18. month = calendar.get(Calendar.MONTH);
  19. day = calendar.get(Calendar.DAY_OF_MONTH);
  20. //初始化日期选择器,并在初始化的时候为其设置事件监听器
  21. datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
  22. @Override
  23. public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  24. MainActivity. this.year = year;
  25. MainActivity. this.month = monthOfYear;
  26. MainActivity. this.day = dayOfMonth;
  27. show(year, month, day);
  28. }
  29. });
  30. }
  31. //通过消息框显示先择的日期
  32. private void show(int year, int month, int day) {
  33. String string = year + "年" + (month + 1) + "月" + day + "日"; //获取选择器的日期
  34. Toast.makeText(MainActivity. this, string, Toast.LENGTH_LONG).show();
  35. }
  36. }

2 时间选择器

    通过一个具体的实例来演示,实现在改变时间的时候,通过消息提示框显示改变后的时间。


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. tools:context= ".MainActivity">
  7. <TimePicker
  8. android:id= "@+id/time"
  9. android:layout_width= "wrap_content"
  10. android:layout_height= "wrap_content">
  11. </TimePicker>
  12. </LinearLayout>

  
  1. package com.xiaomi.time;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.widget.TimePicker;
  5. import android.widget.Toast;
  6. import java.util.Calendar;
  7. public class MainActivity extends AppCompatActivity {
  8. TimePicker timePicker; //定义事件选择器
  9. int hour,minute; //定义小时和分钟
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. //通过布局id获取时间选择器
  15. timePicker=findViewById(R.id.time);
  16. //将时间选额选择器设置为24 小时
  17. timePicker.setIs24HourView( true);
  18. //创建一个时间对象,获取当前的时间
  19. Calendar calendar = Calendar.getInstance();
  20. hour=calendar.get(Calendar.HOUR_OF_DAY);
  21. minute=calendar.get(Calendar.MINUTE);
  22. //初始化时间选择器,并为其设置监听器
  23. timePicker.setOnTimeChangedListener( new TimePicker.OnTimeChangedListener() {
  24. @Override
  25. public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
  26. MainActivity. this.hour=hourOfDay; //改变小时后的参数
  27. MainActivity. this.minute=minute; //改变分钟后的参数
  28. show(hourOfDay,minute); //通过消息提示框显示选择的时间
  29. }
  30. private void show(int hourOfDay, int minute) {
  31. String string=hourOfDay+ "时"+minute+ "分"; //获取选择器设置的时间
  32. Toast.makeText(MainActivity. this,string,Toast.LENGTH_LONG).show();
  33. }
  34. });
  35. }
  36. }

3 计时器

    计时器(chronometer)组件用于显示一串文本,该文本为从某个时间开始,到现在一共过去了多长时间。由于该组件继承Text View组件,所以它以文本的形式显示内容。该组件通过<Chronometer>标记在XML文件中添加计时器的基本语法如下:

   实际上在使用Chronometer组件时,通常使用以下5个方法。

   (1)setBase():用于设置计时器的起始时间,

  (2)setFormat():用于设置显示时间的格式。

  (3)start():用于指定开始计时。

  (4)stop():用于指定停止计时。

  (5)SetOnChronometerListenter():用于为计时器绑定事件监听器。

例:模仿开心消消乐一关6秒计时功能


  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools= "http://schemas.android.com/tools"
  4. android:layout_width= "match_parent"
  5. android:layout_height= "match_parent"
  6. android:background= "@mipmap/kxx"
  7. tools:context= ".MainActivity">
  8. <Chronometer
  9. android:id= "@+id/chronometer"
  10. android:layout_width= "109dp"
  11. android:layout_height= "wrap_content"
  12. android:layout_marginTop= "10dp"
  13. android:layout_marginRight= "15dp"
  14. android:textColor= "#141313"
  15. android:textSize= "30sp"
  16. android:layout_alignParentTop= "true"
  17. android:layout_alignParentRight= "true"/>
  18. </RelativeLayout>

  
  1. package com.xiaomi.kaixinxiaoxiaoleguanka;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.SystemClock;
  6. import android.view.WindowManager;
  7. import android.widget.Chronometer;
  8. public class MainActivity extends Activity {
  9. Chronometer chronometer; //定义计时器
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. //设置全局显示
  15. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  16. //通过布局Id获取计时器
  17. chronometer=findViewById(R.id.chronometer);
  18. //设置起始时间
  19. chronometer.setBase(SystemClock.elapsedRealtime());
  20. //设置显示格式
  21. chronometer.start();
  22. chronometer.setFormat( "%s");
  23. //添加监听器
  24. chronometer.setOnChronometerTickListener( new Chronometer.OnChronometerTickListener() {
  25. @Override
  26. public void onChronometerTick(Chronometer chronometer) {
  27. //判断时间计时器达到60秒
  28. if (SystemClock.elapsedRealtime()-chronometer.getBase()>= 6000){
  29. chronometer.stop();
  30. }
  31. }
  32. });
  33. }
  34. }

 


转载:https://blog.csdn.net/weixin_45519487/article/details/116127082
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场