• Android Studio应用基础,手把手教你从入门到精通(小白学习)总结2 之 常用界面布局和ListView


    总结1链接:

    (156条消息) Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1_好喜欢吃红柚子的博客-CSDN博客

    学习视频链接: 

    (学完必会)Android studio基础,从入门到精通,学完小白也能会_哔哩哔哩_bilibili


    目录

    五、常见界面布局

    1. LinearLayout布局

    1.1 orientation属性:决定控件的排列方式 

    1.2 layout_gravity:决定控件在布局中的对齐方式

    1.3 gravity:决定文字在控件中的对齐方式

    1.4 weight 权重

     2. RelativeLayout相对布局

     2.1 根据布局定位的位置属性

    2.2 根据其他控件定位的位置属性​​​​​​​

    3. ConstraintLayout布局

    4. 自定义布局

    4.1 自定义布局的书写

    4.2 在主布局中引用自定义布局

    4.3 隐藏系统自带标题栏

    5、TableLayout行列布局 

    六、水平和竖直滚动条

    1. HorizentalScrollView 水平滚动条

    2. 垂直滚动条ScrollView

    七、ListView滚动菜单

    1. 滚动菜单ListView的简单应用

    2. 定制ListView界面

    3.实现ListView的点击事件


    五、常见界面布局

    1. LinearLayout布局

    LinearLayout布局的语法格式为

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:app="http://schemas.android.com/apk/res-auto"
    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. android:orientation="horizontal"
    8. >
    9. ……
    10. LinearLayout>

    1.1 orientation属性:决定控件的排列方式 

     android:orientation="horizontal" 或者 “vertical”

    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. tools:context=".MainActivity"
    8. android:orientation="horizontal"
    9. >

                       

                horizontal 水平排列                                                               vertical 垂直排列

    如果不指定orientation的值,默认排列方式是horizontal。

    • 若排列方式为horizontal,则不能指定宽度为match-parent,因为一个按钮的宽度就会把整个屏幕占满,出现下图1所示情况
    • 若排列方式为vertical,则不能指定高度为match-parent,因为一个按钮的高度就会把整个屏幕占满,出现下图2所示情况

                                                                     1                                                                            2                   

    1.2 layout_gravity:决定控件在布局中的对齐方式

    1. <Button
    2. android:id="@+id/b1"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:layout_gravity="top"
    6. android:text="按钮1"
    7. />
    8. <Button
    9. android:id="@+id/b2"
    10. android:layout_width="wrap_content"
    11. android:layout_height="wrap_content"
    12. android:layout_gravity="center_vertical"
    13. android:text="按钮2"
    14. />
    15. <Button
    16. android:id="@+id/b3"
    17. android:layout_width="wrap_content"
    18. android:layout_height="wrap_content"
    19. android:layout_gravity="bottom"
    20. android:text="按钮3"
    21. />

    效果:

    1.3 gravity:决定文字在控件中的对齐方式

    •  把button2的文字对齐方式改为bottom
    • android:gravity="right|bottom" 组合使用
    1. <Button
    2. android:id="@+id/b2"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:layout_gravity="center_vertical"
    6. android:gravity="bottom"
    7. android:text="按钮2"
    8. />

    效果:        

    1.4 weight 权重

    (1)作用:可以使布局内的控件按照权重比显示大小,起到屏幕适配的重要作用

    因为使用了权重weight属性,所以可以将控件的宽度设置为0dp,此时的宽度由权重值决定

    (2)应用:

    •  设置两个控件的权重均为1,则屏幕会按1:1比例为控件分配大小
    1. <EditText
    2. android:id="@+id/input1"
    3. android:layout_width="0dp"
    4. android:layout_height="wrap_content"
    5. android:layout_weight="1"
    6. android:hint="请输入信息">EditText>
    7. <Button
    8. android:id="@+id/send"
    9. android:layout_width="0dp"
    10. android:layout_height="wrap_content"
    11. android:layout_weight="1"
    12. android:text="发送"
    13. />

    效果如下图1所示。

    • 设置输入框的权重为1,设置按钮的宽度为wrap-content,则可如图2效果所示,为常用的手机布局设置。
    1. <EditText
    2. android:id="@+id/input1"
    3. android:layout_width="0dp"
    4. android:layout_height="wrap_content"
    5. android:layout_weight="1"
    6. android:hint="请输入信息">EditText>
    7. <Button
    8. android:id="@+id/send"
    9. android:layout_width="wrap_content"
    10. android:layout_height="wrap_content"
    11. android:text="发送"
    12. />

                                                                               1                                                                      2

     2. RelativeLayout相对布局

    语法如下: 

    1. "1.0" encoding="utf-8"?>
    2. <RelativeLayout 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. tools:context=".MainActivity"
    8. >
    9. RelativeLayout>

     2.1 根据布局定位的位置属性

    为5个按钮分别设置不同的页面效果。

    • android:layout_alignParentLeft="true"     设置当前控件与父布局左对齐
    • android:layout_alignParentTop="true"      设置当前控件与父布局顶端对齐
    • android:layout_centerInParent="true"      设置当前控件位于父布局的中央位置 
    1. <Button
    2. android:id="@+id/b1"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:layout_alignParentLeft="true"
    6. android:layout_alignParentTop="true"
    7. android:text="按钮1">Button>
    8. <Button
    9. android:id="@+id/b2"
    10. android:layout_width="wrap_content"
    11. android:layout_height="wrap_content"
    12. android:layout_alignParentRight="true"
    13. android:layout_alignParentTop="true"
    14. android:text="按钮2">Button>
    15. <Button
    16. android:id="@+id/b3"
    17. android:layout_width="wrap_content"
    18. android:layout_height="wrap_content"
    19. android:layout_centerInParent="true"
    20. android:text="按钮3">Button>
    21. <Button
    22. android:id="@+id/b4"
    23. android:layout_width="wrap_content"
    24. android:layout_height="wrap_content"
    25. android:layout_alignParentBottom="true"
    26. android:layout_alignParentRight="true"
    27. android:text="按钮4">Button>
    28. <Button
    29. android:id="@+id/b5"
    30. android:layout_width="wrap_content"
    31. android:layout_height="wrap_content"
    32. android:layout_alignParentBottom="true"
    33. android:layout_alignParentLeft="true"
    34. android:text="按钮5">Button>

    效果:

    2.2 根据其他控件定位的位置属性

    让按钮1,2,4,5根据按钮3进行位置的排列 

    •  android:layout_above="@+id/b3"       此控件在b3之上
    •  android:layout_toLeftOf="@+id/b3"    此控件在b3左边
    • android:layout_below="@+id/b3"        此控件在b3之下
    • android:layout_toRightOf="@+id/b3"   此控件在b3右边
    1. <Button
    2. android:id="@+id/b1"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:layout_above="@+id/b3"
    6. android:layout_toLeftOf="@+id/b3"
    7. android:text="按钮1">Button>
    8. <Button
    9. android:id="@+id/b2"
    10. android:layout_width="wrap_content"
    11. android:layout_height="wrap_content"
    12. android:layout_above="@+id/b3"
    13. android:layout_toRightOf="@+id/b3"
    14. android:text="按钮2">Button>
    15. <Button
    16. android:id="@+id/b3"
    17. android:layout_width="wrap_content"
    18. android:layout_height="wrap_content"
    19. android:layout_centerInParent="true"
    20. android:text="按钮3">Button>
    21. <Button
    22. android:id="@+id/b4"
    23. android:layout_width="wrap_content"
    24. android:layout_height="wrap_content"
    25. android:layout_below="@+id/b3"
    26. android:layout_toLeftOf="@+id/b3"
    27. android:text="按钮4">Button>
    28. <Button
    29. android:id="@+id/b5"
    30. android:layout_width="wrap_content"
    31. android:layout_height="wrap_content"
    32. android:layout_below="@+id/b3"
    33. android:layout_toRightOf="@+id/b3"
    34. android:text="按钮5">Button>

    效果:

    3. ConstraintLayout布局

    语法格式如下: 

    1. "1.0" encoding="utf-8"?>
    2. <androidx.constraintlayout.widget.ConstraintLayout 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. tools:context=".MainActivity"
    8. >
    9. androidx.constraintlayout.widget.ConstraintLayout>

    4. 自定义布局

    4.1 自定义布局的书写

    • 新建一个布局文件title.xml,导入需要的按钮和背景的图片,把自定义标题栏写好
    1. "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="wrap_content"
    5. android:orientation="horizontal"
    6. android:background="@drawable/bb3">
    7. <Button
    8. android:id="@+id/title_back"
    9. android:layout_width="0dp"
    10. android:layout_height="wrap_content"
    11. android:layout_margin="5dp"
    12. android:layout_weight="1"
    13. android:background="@drawable/bb1"
    14. android:gravity="center"
    15. android:text="Back"
    16. android:textColor="#ffff">Button>
    17. <TextView
    18. android:id="@+id/title_text"
    19. android:layout_width="0dp"
    20. android:layout_height="wrap_content"
    21. android:layout_weight="1"
    22. android:gravity="center"
    23. android:text="title text"
    24. android:textColor="#fff"
    25. android:textSize="24sp">TextView>
    26. <Button
    27. android:id="@+id/title_edit"
    28. android:layout_width="0"
    29. android:layout_height="wrap_content"
    30. android:layout_weight="1"
    31. android:layout_margin="5dp"
    32. android:background="@drawable/bb2"
    33. android:gravity="center"
    34. android:text="edit"
    35. android:textColor="#ffff">Button>
    36. LinearLayout>
    • 在写标题栏过程中为防止出现控件文字不显示问题,把values文件夹目录下的themes.xml文件改为如下语句。
    1. <resources xmlns:tools="http://schemas.android.com/tools">
    2. <style name="Theme.Layout" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
    3. <item name="colorPrimary">@color/purple_500item>
    4. <item name="colorPrimaryVariant">@color/purple_700item>
    5. <item name="colorOnPrimary">@color/whiteitem>
    6. <item name="colorSecondary">@color/teal_200item>
    7. <item name="colorSecondaryVariant">@color/teal_700item>
    8. <item name="colorOnSecondary">@color/blackitem>
    9. <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariantitem>
    10. style>
    11. resources>

    效果如下(有点丑)

    4.2 在主布局中引用自定义布局

    在main_activity.xml文件中插入如下语句:

    
        

    表示将自定义布局引入该布局中。 

    效果如下:

    4.3 隐藏系统自带标题栏

    在main_activity.java中使用ActionBar完成对系统标题栏的隐藏,具体使用方法后续会讲解~ 

    1. package cn.edu.sdut.layout;
    2. import androidx.appcompat.app.ActionBar;
    3. import androidx.appcompat.app.AppCompatActivity;
    4. import android.app.Notification;
    5. import android.os.Bundle;
    6. public class MainActivity extends AppCompatActivity {
    7. @Override
    8. protected void onCreate(Bundle savedInstanceState) {
    9. super.onCreate(savedInstanceState);
    10. setContentView(R.layout.activity_main);
    11. ActionBar actionBar = getSupportActionBar();
    12. if(actionBar!=null){
    13. actionBar.hide();
    14. }
    15. }
    16. }

    成功隐藏系统标题栏:

    5、TableLayout行列布局 

    1. "1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent">
    5. <Button
    6. android:id="@+id/login"
    7. android:gravity="center"
    8. android:layout_centerInParent="true"
    9. android:layout_width="wrap_content"
    10. android:layout_height="wrap_content"
    11. android:text="@string/loginTxt"/>
    12. <TableLayout
    13. android:layout_above="@+id/login"
    14. android:shrinkColumns="0"
    15. android:stretchColumns="1"
    16. android:layout_width="match_parent"
    17. android:layout_height="wrap_content">
    18. <TableRow
    19. android:layout_width="match_parent"
    20. android:layout_height="wrap_content">
    21. <TextView
    22. android:layout_marginLeft="10dp"
    23. android:layout_width="wrap_content"
    24. android:layout_height="wrap_content"
    25. android:text="@string/name">
    26. TextView>
    27. <EditText
    28. android:id="@+id/txt_user"
    29. android:layout_marginRight="10dp"
    30. android:layout_width="match_parent"
    31. android:layout_height="wrap_content"/>
    32. TableRow>
    33. <TableRow
    34. android:layout_width="match_parent"
    35. android:layout_height="wrap_content">
    36. <TextView
    37. android:layout_marginLeft="10dp"
    38. android:layout_width="wrap_content"
    39. android:layout_height="wrap_content"
    40. android:text="@string/psw">
    41. TextView>
    42. <EditText
    43. android:id="@+id/txt_psw"
    44. android:layout_marginRight="10dp"
    45. android:layout_width="match_parent"
    46. android:layout_height="wrap_content"/>
    47. TableRow>
    48. TableLayout>
    49. RelativeLayout>

    六、水平和竖直滚动条

    1. HorizentalScrollView 水平滚动条

    水平滚动条只能包含一个视图,因此不能直接把多个按钮放进去,所以需要先新建一个linear布局的视图,把五个按钮放进去,再把linear布局放在水平滚动条内,即可

    • 结构:
    1. "1.0" encoding="utf-8"?>
    2. 1. 第一层:线性布局大框架
    3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    4. android:orientation="horizontal"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. >
    8. 2.第二层:水平滚动条部件
    9. <HorizontalScrollView
    10. android:layout_width="wrap_content"
    11. android:layout_height="wrap_content">
    12. 3. 第三层:线性布局容器,用来装按钮
    13. <LinearLayout
    14. android:layout_width="wrap_content"
    15. android:layout_height="wrap_content"
    16. android:orientation="horizontal">
    17. 4. 放置多个按钮
    18. LinearLayout>
    19. HorizontalScrollView>
    20. LinearLayout>

    • 代码:
    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="horizontal"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent"
    6. >
    7. <HorizontalScrollView
    8. android:layout_width="wrap_content"
    9. android:layout_height="wrap_content">
    10. <LinearLayout
    11. android:layout_width="wrap_content"
    12. android:layout_height="wrap_content"
    13. android:orientation="horizontal">
    14. <Button
    15. android:id="@+id/button1"
    16. android:layout_width="wrap_content"
    17. android:layout_height="wrap_content"
    18. android:text="Button" />
    19. <Button
    20. android:id="@+id/button2"
    21. android:layout_width="wrap_content"
    22. android:layout_height="wrap_content"
    23. android:text="Button" />
    24. <Button
    25. android:id="@+id/button3"
    26. android:layout_width="wrap_content"
    27. android:layout_height="wrap_content"
    28. android:text="Button" />
    29. <Button
    30. android:id="@+id/button4"
    31. android:layout_width="wrap_content"
    32. android:layout_height="wrap_content"
    33. android:text="Button" />
    34. <Button
    35. android:id="@+id/button5"
    36. android:layout_width="wrap_content"
    37. android:layout_height="wrap_content"
    38. android:text="Button" />
    39. LinearLayout>
    40. HorizontalScrollView>
    41. LinearLayout>

    2. 垂直滚动条ScrollView

    ScrollView在最外层,要有xmlns的这个语句,因为这个语句是唯一的,而且只能且必须加在最外层框架的头标签里。

    xmlns:android="http://schemas.android.com/apk/res/android"

    结构:

    1. "1.0" encoding="utf-8"?>
    2. 1. ScrollView,在最外层
    3. <ScrollView
    4. xmlns:android="http://schemas.android.com/apk/res/android"
    5. android:layout_width="wrap_content"
    6. android:layout_height="wrap_content"
    7. >
    8. 2. 线性布局容器,装按钮
    9. <LinearLayout
    10. android:orientation="vertical"
    11. android:layout_width="match_parent"
    12. android:layout_height="match_parent"
    13. >
    14. 3. 放置多个按钮
    15. LinearLayout>
    16. ScrollView>

    代码:

    1. "1.0" encoding="utf-8"?>
    2. <ScrollView
    3.     xmlns:android="http://schemas.android.com/apk/res/android"
    4.     android:layout_width="wrap_content"
    5.     android:layout_height="wrap_content"
    6.     >
    7.     <LinearLayout
    8.         android:orientation="vertical"
    9.         android:layout_width="match_parent"
    10.         android:layout_height="match_parent"
    11.         >
    12.         <Button
    13.             android:layout_width="wrap_content"
    14.             android:layout_height="100dp">
    15.         Button>
    16.         <Button
    17.             android:layout_width="wrap_content"
    18.             android:layout_height="100dp">
    19.         Button>
    20.         <Button
    21.             android:layout_width="wrap_content"
    22.             android:layout_height="100dp">
    23.         Button>
    24.         <Button
    25.             android:layout_width="wrap_content"
    26.             android:layout_height="100dp">
    27.         Button>
    28.         <Button
    29.             android:layout_width="wrap_content"
    30.             android:layout_height="100dp">
    31.         Button>
    32.         <Button
    33.             android:layout_width="wrap_content"
    34.             android:layout_height="100dp">
    35.         Button>
    36.         <Button
    37.             android:layout_width="wrap_content"
    38.             android:layout_height="100dp">
    39.         Button>
    40.         <Button
    41.             android:layout_width="wrap_content"
    42.             android:layout_height="100dp">
    43.         Button>
    44.         <Button
    45.             android:layout_width="wrap_content"
    46.             android:layout_height="100dp">
    47.         Button>
    48.     LinearLayout>
    49. ScrollView>

    七、ListView滚动菜单

    新建一个名为ListView的项目,完成后续操作。

    1. 滚动菜单ListView的简单应用

    •  在布局文件中定义一个滚动菜单
    1. <ListView
    2. android:id="@+id/list_view"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. />
    •  在MainActivity.java文件中进行对显示数据和适配器的定义

    String类型的fruit数组存储了菜单想要显示的内容

    数组中的数组无法直接传递给ListView,因此需要借助适配器完成使用ArrayAdapter完成数据对ListView的传输,适配器的构造函数中需要其次传入三个参数:

    • 所处的activity
    • Android自带的xml文件的构造文字的容器
    • 想要输出的内容。

    最后使用setAdapter方法给滚动菜单配置上刚刚定义的配适器

    1. package cn.edu.sdut.listview;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.widget.ArrayAdapter;
    5. import android.widget.ListView;
    6. public class MainActivity extends AppCompatActivity {
    7. // 数组存取listview想要展示的信息
    8. private String[] fruit ={"apple","banana","orange","watermelon",
    9. "pear","grape","strawberry","cherry","mango","Coconut","tomato","lemon",
    10. "apple","banana","orange","watermelon", "pear","grape","strawberry","cherry",
    11. "mango","Coconut"};
    12. @Override
    13. protected void onCreate(Bundle savedInstanceState) {
    14. super.onCreate(savedInstanceState);
    15. setContentView(R.layout.activity_main);
    16. // 配置适配器
    17. ArrayAdapter adapter = new ArrayAdapter
    18. (MainActivity.this, android.R.layout.simple_list_item_1,fruit);
    19. ListView listView = (ListView) findViewById(R.id.list_view);
    20. listView.setAdapter(adapter);
    21. }
    22. }

    效果如下:

    2. 定制ListView界面

    实现水果图片和对应水果名称匹配一起在滚动列表中显示。

    • 新建Fruit.java类,进行水果名和水果图片名称的实体类编写
    1. package cn.edu.sdut.listview;
    2. public class Fruit {
    3. private String name;
    4. private int imageId;
    5. public Fruit(String name, int imageId) {
    6. this.name = name;
    7. this.imageId = imageId;
    8. }
    9. public String getName() {
    10. return name;
    11. }
    12. public int getimageId() {
    13. return imageId;
    14. }
    15. }
    •  定义水果适配器FruitAdaptor.java
    1. package cn.edu.sdut.listview;
    2. import android.content.Context;
    3. import android.view.LayoutInflater;
    4. import android.view.View;
    5. import android.view.ViewGroup;
    6. import android.widget.ArrayAdapter;
    7. import android.widget.ImageView;
    8. import android.widget.TextView;
    9. import java.util.List;
    10. public class FruitAdapter extends ArrayAdapter {
    11. private int resourceId;
    12. public FruitAdapter(Context context, int textViewResourceId, List object){
    13. super(context,textViewResourceId,object);
    14. resourceId = textViewResourceId;
    15. }
    16. public View getView(int position, View coverView, ViewGroup parent){
    17. Fruit fruit = getItem(position);
    18. View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
    19. ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
    20. TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
    21. fruitImage.setImageResource(fruit.getimageId());
    22. fruitName.setText(fruit.getName());
    23. return view;
    24. }
    25. }
    •  对主活动进行编写MainActivity.java进行编写

         1. 新建一个水果类的列表,进行对水果名和水果图片名的存储

         2. 使用initFruit方法进行对列表元素的添加

         3. 把适配器给滚动列表set上

    1. package cn.edu.sdut.listview;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.widget.ArrayAdapter;
    5. import android.widget.ListView;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8. public class MainActivity extends AppCompatActivity {
    9. private List fruitList = new ArrayList<>();
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState) {
    12. super.onCreate(savedInstanceState);
    13. setContentView(R.layout.activity_main);
    14. initFruits();
    15. FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);
    16. ListView listView = (ListView) findViewById(R.id.list_view);
    17. listView.setAdapter(adapter);
    18. }
    19. //把水果名称和对应图片加入信息列表
    20. private void initFruits(){
    21. for(int i=0;i<2;i++){
    22. Fruit apple = new Fruit("apple",R.drawable.apple);
    23. fruitList.add(apple);
    24. Fruit banana = new Fruit("banana",R.drawable.banana);
    25. fruitList.add(banana);
    26. Fruit orange = new Fruit("orange",R.drawable.orange);
    27. fruitList.add(orange);
    28. Fruit watermelon = new Fruit("watermelon",R.drawable.watermelon);
    29. fruitList.add(watermelon);
    30. Fruit pear= new Fruit("pear",R.drawable.pear);
    31. fruitList.add(pear);
    32. Fruit grape = new Fruit("grape",R.drawable.grape);
    33. fruitList.add(grape);
    34. Fruit strawberry = new Fruit("strawberry",R.drawable.stawberry);
    35. fruitList.add(strawberry);
    36. Fruit cherry = new Fruit("cherry",R.drawable.cherry);
    37. fruitList.add(cherry);
    38. Fruit mango = new Fruit("mango",R.drawable.mango);
    39. fruitList.add(mango);
    40. Fruit coconut = new Fruit("coconut",R.drawable.coconut);
    41. fruitList.add(coconut);
    42. Fruit tomato = new Fruit("tomato",R.drawable.tomato);
    43. fruitList.add(tomato);
    44. Fruit lemon = new Fruit("lemon",R.drawable.lemon);
    45. fruitList.add(lemon);
    46. }
    47. }
    48. }

    效果如下:

    3.实现ListView的点击事件

    • 使用setOnItemListener方法为滚动菜单设置点击事件
    • onItemClick方法参数中的 i 为点击到的具体元素
    • 使用toast方法将点击到的水果名弹窗显示

    在主活动中添加如下代码 

     代码:

    1. package cn.edu.sdut.listview;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.AdapterView;
    6. import android.widget.ArrayAdapter;
    7. import android.widget.ListView;
    8. import android.widget.Toast;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. public class MainActivity extends AppCompatActivity {
    12. private List fruitList = new ArrayList<>();
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. //为fruitList列表添加元素
    18. initFruits();
    19. FruitAdapter adapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);
    20. ListView listView = (ListView) findViewById(R.id.list_view);
    21. listView.setAdapter(adapter);
    22. // 设置点击事件
    23. listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    24. @Override
    25. public void onItemClick(AdapterView adapterView, View view, int i, long l) {
    26. Fruit fruit = fruitList.get(i);
    27. Toast.makeText(MainActivity.this,fruit.getName(), Toast.LENGTH_SHORT).show();
    28. }
    29. });
    30. }
    31. //把水果名称和对应图片加入信息列表
    32. private void initFruits(){
    33. // 为了让滚动列表中多显示一些元素,所以添加两遍重复的内容
    34. for(int i=0;i<2;i++){
    35. Fruit apple = new Fruit("apple",R.drawable.apple);
    36. fruitList.add(apple);
    37. Fruit banana = new Fruit("banana",R.drawable.banana);
    38. fruitList.add(banana);
    39. Fruit orange = new Fruit("orange",R.drawable.orange);
    40. fruitList.add(orange);
    41. Fruit watermelon = new Fruit("watermelon",R.drawable.watermelon);
    42. fruitList.add(watermelon);
    43. Fruit pear= new Fruit("pear",R.drawable.pear);
    44. fruitList.add(pear);
    45. Fruit grape = new Fruit("grape",R.drawable.grape);
    46. fruitList.add(grape);
    47. Fruit strawberry = new Fruit("strawberry",R.drawable.stawberry);
    48. fruitList.add(strawberry);
    49. Fruit cherry = new Fruit("cherry",R.drawable.cherry);
    50. fruitList.add(cherry);
    51. Fruit mango = new Fruit("mango",R.drawable.mango);
    52. fruitList.add(mango);
    53. Fruit coconut = new Fruit("coconut",R.drawable.coconut);
    54. fruitList.add(coconut);
    55. Fruit tomato = new Fruit("tomato",R.drawable.tomato);
    56. fruitList.add(tomato);
    57. Fruit lemon = new Fruit("lemon",R.drawable.lemon);
    58. fruitList.add(lemon);
    59. }
    60. }
    61. }

    效果:

  • 相关阅读:
    windows编程之位图绘制
    Flutter:Android/iOS集成Flutter模块
    网络基础(1)
    20231027 基于STM32mp157a 的内核与应用层通过子系统控制led灯,以及计时器功能
    庖丁解牛:NIO核心概念与机制详解 01 _ 入门篇
    OpenHarmony鸿蒙南向开发案例:【智能猫眼(基于3518开发板)】
    实例分割Yolact边缘端部署 (三) 从onnx到caffemodel
    js数据过滤算法搭建
    Windows环境下的ELK——logstash+elasticsearch(3)
    镭速如何解决UDP传输不通的问题
  • 原文地址:https://blog.csdn.net/weixin_45662399/article/details/126593068