• 第二章 基本UI组件


    1 文本框组件

    1.1 TextView

    示例:实现QQ聊天框

    1. "1.0" encoding="utf-8"?>
    2. <GridLayout 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:columnCount="6"
    8. android:rowCount="4"
    9. android:background="@drawable/bg"
    10. tools:context=".MainActivity">
    11. <ImageView
    12. android:layout_width="wrap_content"
    13. android:layout_height="wrap_content"
    14. android:layout_gravity="end"
    15. android:paddingRight="10dp"
    16. android:src="@drawable/ico2"
    17. android:layout_column="5"
    18. android:layout_row="0"/>
    19. <TextView
    20. android:layout_marginTop="10dp"
    21. android:paddingTop="10dp"
    22. android:layout_width="wrap_content"
    23. android:layout_height="wrap_content"
    24. android:maxWidth="@dimen/max_width"
    25. android:layout_gravity="end"
    26. android:background="@drawable/bg_textview"
    27. android:text="你好呀,好久不见了!最近忙什么呢?"
    28. android:textColor="#16476b"
    29. android:textSize="14sp"
    30. android:layout_column="1"
    31. android:layout_row="0"
    32. android:layout_columnSpan="4"/>
    33. <ImageView
    34. android:layout_width="wrap_content"
    35. android:layout_height="wrap_content"
    36. android:layout_gravity="start"
    37. android:paddingLeft="10dp"
    38. android:src="@drawable/ico1"
    39. android:layout_column="0"
    40. android:layout_row="1"/>
    41. <TextView
    42. android:paddingTop="10dp"
    43. android:layout_marginTop="10dp"
    44. android:layout_width="wrap_content"
    45. android:layout_height="wrap_content"
    46. android:maxWidth="@dimen/max_width"
    47. android:layout_gravity="start"
    48. android:background="@drawable/bg_textview2"
    49. android:text="最近在做一个手机游戏,所以很少上QQ"
    50. android:textColor="#FFFFFF"
    51. android:textSize="14sp"
    52. android:layout_column="1"
    53. android:layout_row="1"
    54. android:layout_columnSpan="4"/>
    55. <ImageView
    56. android:layout_width="wrap_content"
    57. android:layout_height="wrap_content"
    58. android:layout_gravity="end"
    59. android:paddingRight="10dp"
    60. android:src="@drawable/ico2"
    61. android:layout_column="5"
    62. android:layout_row="2"/>
    63. <TextView
    64. android:paddingTop="10dp"
    65. android:layout_marginTop="10dp"
    66. android:layout_width="wrap_content"
    67. android:layout_height="wrap_content"
    68. android:maxWidth="@dimen/max_width"
    69. android:layout_gravity="end"
    70. android:background="@drawable/bg_textview"
    71. android:text="最近进展如何?需要我帮忙吗?"
    72. android:textColor="#16476b"
    73. android:textSize="14sp"
    74. android:layout_column="1"
    75. android:layout_row="2"
    76. android:layout_columnSpan="4"/>
    77. <ImageView
    78. android:layout_width="wrap_content"
    79. android:layout_height="wrap_content"
    80. android:layout_gravity="start"
    81. android:paddingLeft="10dp"
    82. android:src="@drawable/ico1"
    83. android:layout_column="0"
    84. android:layout_row="3"/>
    85. <TextView
    86. android:paddingTop="10dp"
    87. android:layout_marginTop="10dp"
    88. android:layout_width="wrap_content"
    89. android:layout_height="wrap_content"
    90. android:maxWidth="@dimen/max_width"
    91. android:layout_gravity="start"
    92. android:background="@drawable/bg_textview2"
    93. android:text="总算大功告成了,有时间发给你玩哦"
    94. android:textColor="#FFFFFF"
    95. android:textSize="14sp"
    96. android:layout_column="1"
    97. android:layout_row="3"
    98. android:layout_columnSpan="4"/>
    99. GridLayout>

    1.2 编辑框 EditText

     几个重要属性:

    • hint:当用户没有输入的时候对用户的输入进行提示
    • inputType:限定用户输入的内容
    • drawStart、drawEnd、drawBottom、drawTop:可以在左侧、右侧、上面、下面绘制一个小图标
    • lines:控制行数,超过行数将向上滚动

    示例:

    1. "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="#EAEAEA"
    8. android:orientation="vertical"
    9. tools:context=".MainActivity">
    10. <EditText
    11. android:layout_width="match_parent"
    12. android:layout_height="wrap_content"
    13. android:lines="6"
    14. android:hint="说点什么吧。。。"
    15. android:background="#FFFFFF"
    16. android:padding="5dp"
    17. android:gravity="left|top"
    18. android:layout_marginBottom="10dp"
    19. android:inputType="textMultiLine"/>
    20. <TextView
    21. android:layout_width="match_parent"
    22. android:layout_height="wrap_content"
    23. android:drawableLeft="@mipmap/addpicture"
    24. android:drawablePadding="5dp"
    25. android:text="添加照片"
    26. android:gravity="center_vertical"
    27. android:background="#FFFFFF"
    28. android:padding="8dp"
    29. android:layout_marginBottom="10dp"/>
    30. <ImageView
    31. android:layout_width="match_parent"
    32. android:layout_height="wrap_content"
    33. android:src="@mipmap/bottom"
    34. android:scaleType="fitXY"/>
    35. LinearLayout>

    1.3 普通按钮

     按钮通常与监听器组合使用。

    什么是监听器?

     有两种方式添加事件监听器:

    • 匿名内部类方式
    1. Button button = findViewById(R.id.button1);
    2. button.setOnClickListener(new View.OnClickListener() {
    3. @Override
    4. public void onClick(View v) {
    5. Toast.makeText(MainActivity.this, "你点击了按钮", Toast.LENGTH_SHORT).show();
    6. }
    7. });
    • 通过onClick属性实现
    1. 在Activity中编写一个包含View类型参数的方法。
    2. 将android:onClick指定为刚刚指定的方法名
    1. public void myClick(View view) {
    2. Toast.makeText(MainActivity.this, "你点击了按钮2", Toast.LENGTH_SHORT).show();
    3. }
    1. <Button
    2. android:layout_width="match_parent"
    3. android:layout_height="wrap_content"
    4. android:text="按钮2"
    5. android:onClick="myClick"/>

    1.4 图片按钮 

     1.5 单选按钮

    两种方式获得单选的内容:

    1. public class MainActivity extends AppCompatActivity {
    2. RadioGroup radioGroup;
    3. @Override
    4. protected void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_main);
    7. //方式1
    8. radioGroup = findViewById(R.id.radioGroup);
    9. radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    10. @Override
    11. public void onCheckedChanged(RadioGroup group, int checkedId) {
    12. RadioButton radioButton = findViewById(checkedId);
    13. Toast.makeText(MainActivity.this, "性别:"+radioButton.getText(), Toast.LENGTH_SHORT).show();
    14. }
    15. });
    16. //方式2
    17. Button button = findViewById(R.id.button);
    18. button.setOnClickListener(new View.OnClickListener() {
    19. @Override
    20. public void onClick(View v) {
    21. for(int i = 0; i < radioGroup.getChildCount(); i++) {
    22. RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);
    23. if(radioButton.isChecked()) {
    24. Toast.makeText(MainActivity.this, "性别:"+radioButton.getText(), Toast.LENGTH_SHORT).show();
    25. }
    26. }
    27. }
    28. });
    29. }
    30. }

     1.6 复选框

     与单选框不同的是,复选框可以选中多个。

    1. <Button
    2. android:id="@+id/btn_login"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:text="确认登录"
    6. android:background="#009688"/>
    7. <Button
    8. android:layout_marginTop="20dp"
    9. android:layout_width="match_parent"
    10. android:layout_height="wrap_content"
    11. android:text="取消"
    12. android:background="#FFFFFF"/>
    1. btn_login = findViewById(R.id.btn_login);
    2. checkBox1 = findViewById(R.id.checkbox1);
    3. checkBox2 = findViewById(R.id.checkbox2);
    4. checkBox3 = findViewById(R.id.checkbox3);
    5. btn_login.setOnClickListener(new View.OnClickListener() {
    6. @Override
    7. public void onClick(View v) {
    8. String str = "";
    9. if(checkBox1.isChecked()) {
    10. str += checkBox1.getText().toString() + "\n";
    11. }
    12. if(checkBox2.isChecked()) {
    13. str += checkBox2.getText().toString() + "\n";
    14. }
    15. if(checkBox3.isChecked()) {
    16. str += checkBox3.getText().toString();
    17. }
    18. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    19. }
    20. });

    1.7 日期选择器

     

    1. <DatePicker
    2. android:id="@+id/date_picker"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"/>
    1. DatePicker datePicker = findViewById(R.id.date_picker);
    2. datePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
    3. @Override
    4. public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    5. String str = year + "年" + monthOfYear + "月" + dayOfMonth + "日";
    6. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    7. }
    8. });

    1.8 时间选择器

    1. <TimePicker
    2. android:id="@+id/timepicker"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"/>
    1. DatePicker datePicker = findViewById(R.id.date_picker);
    2. datePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
    3. @Override
    4. public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    5. String str = year + "年" + monthOfYear + "月" + dayOfMonth + "日";
    6. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    7. }
    8. });

    1.9 计时器

     

    1. <Chronometer
    2. android:id="@+id/chronometer"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:textColor="#FFFF00"
    6. android:layout_alignParentRight="true"
    7. android:layout_marginRight="20dp"
    8. android:layout_marginTop="40dp"
    9. android:textSize="20sp"/>
    1. Chronometer chronometer = findViewById(R.id.chronometer);
    2. chronometer.setBase(SystemClock.elapsedRealtime());
    3. chronometer.setFormat("%s");
    4. chronometer.start();
    5. chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
    6. @Override
    7. public void onChronometerTick(Chronometer chronometer) {
    8. if(SystemClock.elapsedRealtime() - chronometer.getBase() >= 60000) {
    9. chronometer.stop();
    10. }
    11. }
    12. });

  • 相关阅读:
    Redis查询Key
    分享一个开源的windows安卓投屏工具,scrcpy
    Golang MQTT的使用 实现发布订阅
    QT学习总结之QObject详解
    MySQL
    OceanBase 里的 schema 是什么?
    CountDownLatch和CyclicBarrier:如何让多线程步调一致?
    深度学习入门(十九)深度学习计算——自定义层
    vivo 推送系统的容灾建设与实践
    getBytes方法
  • 原文地址:https://blog.csdn.net/qq_37054755/article/details/127476120