1.实验目的
- 掌握简单控件的使用,能够搭建简单的界面;
- 掌握ListView控件与RecyclerView控件的使用,能独立搭建列表界面。
2.实验要求
- 开发一个整数加法的程序,实现将计算结果显示到界面上的功能。
- 利用ListView控件完成“超市界面”展示页面。
- 利用RecyclerView控件实现“动物列表界面”的展示。
- 利用简单控件实现个人信息界面的展示与处理,包含不限于姓名(EditText控件)、年龄(EditText控件)、性别(RadioButton控件)、爱好(CheckBox控件),点击提交后输出个人信息。
题目目录:
1.开发一个整数加法的程序,实现将计算结果显示到界面的功能。
3.利用RecyclerView控件实现“动物列表界面”的展示。
1.开发一个整数加法的程序,实现将计算结果显示到界面的功能。
- xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/num1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入第一个整数"
android:inputType="number" />
<EditText
android:id="@+id/num2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入第二个整数"
android:inputType="number" />
<Button
android:id="@+id/add_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="相加" />
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="结果:"
android:textSize="20sp" />
</LinearLayout>
- Java代码:
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
// 声明EditText用于输入数字的变量
private EditText num1, num2;
// 声明TextView用于显示结果的变量
private TextView result;
// 声明Button用于触发相加操作的变量
private Button addButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前Activity的布局
setContentView(R.layout.activity_main);
// 获取界面上输入数字的EditText控件
num1 = findViewById(R.id.num1);
num2 = findViewById(R.id.num2);
// 获取用来显示结果的TextView控件
result = findViewById(R.id.result);
// 获取用来执行加法操作的Button控件
addButton = findViewById(R.id.add_button);
// 为加法按钮设置点击事件监听器
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 从num1和num2输入框获取文本并转换为整数
int number1 = Integer.parseInt(num1.getText().toString());
int number2 = Integer.parseInt(num2.getText().toString());
// 计算两个数字的和
int sum = number1 + number2;
// 将计算结果显示在result TextView中
result.setText("结果:" + sum);
}
});
}
}
- 运行结果如下:
2.利用ListView控件完成“超市界面”展示页面。
- activity.main.xml
<!-- res/layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- item_list.xml
<!-- res/layout/item_list.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<ImageView
android:id="@+id/iv"
android:layout_width="120dp"
android:layout_height="90dp"
android:layout_centerVertical="true"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/iv"
android:layout_centerVertical="true">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品名称"
android:textSize="20sp"
android:textColor="#000000"/>
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格:"
android:textSize="20sp"
android:layout_marginTop="10dp"
android:layout_below="@id/title"
android:textColor="#FF8F03"/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textSize="20sp"
android:layout_below="@id/title"
android:layout_toRightOf="@id/tv_price"
android:textColor="#FF8F03"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</RelativeLayout>
- CustomAdapter.java
// CustomAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
// 自定义适配器类,继承自BaseAdapter
public class CustomAdapter extends BaseAdapter {
// 声明上下文、名称、价格和图片资源数组
private Context context;
private String[] names;
private String[] prices;
private int[] pictures;
// 构造函数,初始化适配器的数据源
public CustomAdapter(Context context, String[] names, String[] prices, int[] pictures) {
this.context = context;
this.names = names;
this.prices = prices;
this.pictures = pictures;
}
// 返回列表项的总数
@Override
public int getCount() {
return names.length; // 返回数据源中名称数组的长度
}
// 根据位置获取对应的数据项
@Override
public Object getItem(int position) {
return names[position]; // 返回指定位置的名称
}
// 返回每个列表项的ID,这里使用位置作为ID
@Override
public long getItemId(int position) {
return position; // 返回指定位置作为ID
}
// 创建和返回对应位置的视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 如果convertView为空,则需要创建一个新的视图
if (convertView == null) {
// 使用LayoutInflater来加载列表项布局
convertView = LayoutInflater.from(context).inflate(R.layout.item_list, parent, false);
}
// 获取视图中的ImageView和TextView控件
ImageView imageView = convertView.findViewById(R.id.iv);
TextView title = convertView.findViewById(R.id.title);
TextView price = convertView.findViewById(R.id.price);
// 设置数据到视图控件中
imageView.setImageResource(pictures[position]); // 设置对应位置的图片
title.setText(names[position]); // 设置对应位置的名称
price.setText(prices[position]); // 设置对应位置的价格
// 返回填充好的视图
return convertView;
}
}
- MainActivity,java
// MainActivity.java
import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
// MainActivity类,继承自AppCompatActivity
public class MainActivity extends AppCompatActivity {
// 声明一个字符串数组,包含食品名称
private String[] names = {"手撕面包", "华夫饼", "小麻花", "每日坚果", "盐焗鸡蛋", "原味肉松饼"};
// 声明一个字符串数组,包含对应食品的价格
private String[] prices = {"¥32.90", "¥36.90", "¥18.80", "¥19.90", "¥30.70", "¥34.90"};
// 声明一个整型数组,包含对应食品的图片资源ID
private int[] pictures = {
R.drawable.tear_bread,
R.drawable.waffle,
R.drawable.dough_twist,
R.drawable.daily_nuts,
R.drawable.salt_baked_eggs,
R.drawable.meat_floss
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前Activity的布局
setContentView(R.layout.activity_main);
// 获取Activity布局中的ListView控件
ListView listView = findViewById(R.id.list_view);
// 创建CustomAdapter实例,将上下文、名称、价格和图片数组传给它
CustomAdapter adapter = new CustomAdapter(this, names, prices, pictures);
// 将适配器设置到ListView中,以显示内容
listView.setAdapter(adapter);
}
}
- 运行结果
3.利用RecyclerView控件实现“动物列表界面”的展示。
- activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
- item_animal.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_img"
android:layout_width="120dp"
android:layout_height="90dp" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#FF8F03" />
<TextView
android:id="@+id/tv_introduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:layout_below="@+id/tv_name"
android:textColor="#FF716C6D"
android:maxLines="2"
android:ellipsize="end" />
</RelativeLayout>
</LinearLayout>
- MainActivity.java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<Animal> animalList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置主布局
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// 初始化动物列表
animalList = new ArrayList<>();
animalList.add(new Animal("小猫", R.drawable.cat,"独立、好奇的小型哺乳动物,广受欢迎,喜欢在家中自由活动。"));
animalList.add(new Animal("老虎", R.drawable.tiger,"世界上最大的猫科动物,拥有橙色的毛皮和黑色条纹,是顶级捕食者。"));
animalList.add(new Animal("小黄鸭", R.drawable.yellowduck,"明亮黄色的可爱水鸟,喜欢在水中游泳,与其他鸭子成群活动。" ));
animalList.add(new Animal("小鹿", R.drawable.fawn ,"可爱而温和的鹿幼崽,拥有美丽斑点,主要以草和嫩芽为食。"));
animalList.add(new Animal("西伯利亚哈士奇", R.drawable.siberiankusky ,"一种活泼友好的中型犬,适应寒冷气候,具有浓密的双层毛发。"));
// 设置适配器
recyclerView.setAdapter(new AnimalAdapter(animalList));
}
// 动物模型类
public static class Animal {
private String name;
private int imageResourceId;
private String introduce;
public Animal(String name, int imageResourceId,String introduce) {
this.name = name;
this.imageResourceId = imageResourceId;
this.introduce = introduce;
}
public String getName() {
return name;
}
public String getIntroduce(){
return introduce;
}
public int getImageResourceId() {
return imageResourceId;
}
}
// 适配器类
public class AnimalAdapter extends RecyclerView.Adapter<AnimalAdapter.AnimalViewHolder> {
private List<Animal> animalList;
public AnimalAdapter(List<Animal> animalList) {
this.animalList = animalList;
}
@NonNull
@Override
public AnimalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_animal, parent, false);
return new AnimalViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull AnimalViewHolder holder, int position) {
Animal animal = animalList.get(position);
holder.animalName.setText(animal.getName());
holder.animaIntroduce.setText(animal.getIntroduce());
holder.animalImage.setImageResource(animal.getImageResourceId());
}
@Override
public int getItemCount() {
return animalList.size();
}
public class AnimalViewHolder extends RecyclerView.ViewHolder {
TextView animalName;
ImageView animalImage;
TextView animaIntroduce;
AnimalViewHolder(View itemView) {
super(itemView);
animalName = itemView.findViewById(R.id.tv_name);
animalImage = itemView.findViewById(R.id.iv_img);
animaIntroduce = itemView.findViewById(R.id.tv_introduce);
}
}
}
}
- 运行结果
4.利用简单控件实现个人信息界面的展示与处理,包含不限于姓名(EditText控件)、年龄(EditText控件)、性别(RadioButton控件)、爱好(CheckBox控件),点击提交后输出个人信息。
- 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:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:" />
<EditText
android:id="@+id/editTextName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄:" />
<EditText
android:id="@+id/editTextAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入年龄"
android:inputType="number" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:" />
<RadioGroup
android:id="@+id/radioGroupGender"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/radioMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男" />
<RadioButton
android:id="@+id/radioFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" />
</RadioGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="爱好:" />
<CheckBox
android:id="@+id/checkBoxReading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="阅读" />
<CheckBox
android:id="@+id/checkBoxTraveling"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旅行" />
<CheckBox
android:id="@+id/checkBoxSports"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="运动" />
<Button
android:id="@+id/buttonSubmit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="提交" />
<!-- 新增用于显示信息的 TextView -->
<TextView
android:id="@+id/textViewOutput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="个人信息将显示在这里"
android:paddingTop="16dp"
android:textSize="16sp"
android:textColor="#000000" />
</LinearLayout>
- MainActivity.java
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
// MainActivity类,继承自AppCompatActivity
public class MainActivity extends AppCompatActivity {
// 声明界面控件
private EditText editTextName, editTextAge; // 输入姓名和年龄的EditText
private RadioGroup radioGroupGender; // 性别选择的RadioGroup
private CheckBox checkBoxReading, checkBoxTraveling, checkBoxSports; // 爱好选择的CheckBox
private TextView textViewOutput; // 显示输出信息的TextView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前Activity的布局
setContentView(R.layout.activity_main);
// 初始化界面控件
editTextName = findViewById(R.id.editTextName);
editTextAge = findViewById(R.id.editTextAge);
radioGroupGender = findViewById(R.id.radioGroupGender);
checkBoxReading = findViewById(R.id.checkBoxReading);
checkBoxTraveling = findViewById(R.id.checkBoxTraveling);
checkBoxSports = findViewById(R.id.checkBoxSports);
Button buttonSubmit = findViewById(R.id.buttonSubmit);
textViewOutput = findViewById(R.id.textViewOutput);
// 设置按钮点击事件监听器
buttonSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 调用submitInfo方法提交信息
submitInfo();
}
});
}
// 提交信息的方法
private void submitInfo() {
// 获取用户输入的姓名和年龄
String name = editTextName.getText().toString();
String age = editTextAge.getText().toString();
// 获取选中的性别
int selectedGenderId = radioGroupGender.getCheckedRadioButtonId();
RadioButton radioButtonGender = findViewById(selectedGenderId);
// 如果没有选择性别,则默认为"未选择"
String gender = radioButtonGender != null ? radioButtonGender.getText().toString() : "未选择";
// 构建爱好的字符串
StringBuilder hobbies = new StringBuilder();
if (checkBoxReading.isChecked()) {
hobbies.append("阅读 "); // 如果选择了阅读,添加到爱好字符串
}
if (checkBoxTraveling.isChecked()) {
hobbies.append("旅行 "); // 如果选择了旅行,添加到爱好字符串
}
if (checkBoxSports.isChecked()) {
hobbies.append("运动 "); // 如果选择了运动,添加到爱好字符串
}
// 构建输出信息
String info = "姓名: " + name + "\n年龄: " + age + "\n性别: " + gender + "\n爱好: " + hobbies.toString().trim();
// 显示信息在TextView上
textViewOutput.setText(info);
}
}
- 运行结果
实验小结:
此次实验的核心目标是掌握Android开发中常用控件的使用,特别是简单控件的应用以及列表控件的实现。实验主要收获了掌握简单控件的使用,通过实现个人信息收集界面,我深入了解了多种基础控件的使用,包括:EditText,RadioButton,CheckBox,TextView。同时要掌握了ListView 和 RecyclerView 的使用。这为我今后的开发实践提供了坚实的基础。