当前位置:   article > 正文

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

android studio tools:context

总结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. <?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. 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. <?xml version="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. <?xml version="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. <?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="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. <!-- Base application theme. -->
  3. <style name="Theme.Layout" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
  4. <!-- Primary brand color. -->
  5. <item name="colorPrimary">@color/purple_500</item>
  6. <item name="colorPrimaryVariant">@color/purple_700</item>
  7. <item name="colorOnPrimary">@color/white</item>
  8. <!-- Secondary brand color. -->
  9. <item name="colorSecondary">@color/teal_200</item>
  10. <item name="colorSecondaryVariant">@color/teal_700</item>
  11. <item name="colorOnSecondary">@color/black</item>
  12. <!-- Status bar color. -->
  13. <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
  14. <!-- Customize your theme here. -->
  15. </style>
  16. </resources>

效果如下(有点丑)

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

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

<!--    引入自定义布局-->
    <include layout="@layout/title" ></include>

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

效果如下:

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. <?xml version="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. <?xml version="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. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. 权重:控制宽度
  4. -->
  5. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  6. android:orientation="horizontal"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. >
  10. <!-- 水平滚动条只能包含一个视图,所以需要先新建一个linear的视图,把五个按钮放进去,
  11. 再把linear放在水平滚动条内,即可-->
  12. <HorizontalScrollView
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content">
  15. <LinearLayout
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:orientation="horizontal">
  19. <Button
  20. android:id="@+id/button1"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:text="Button" />
  24. <!--&lt;!&ndash; 使用view给按钮添加间隔&ndash;&gt;-->
  25. <!-- <View-->
  26. <!-- android:layout_width="0dp"-->
  27. <!-- android:layout_weight="1"-->
  28. <!-- android:layout_height="wrap_content"></View>-->
  29. <Button
  30. android:id="@+id/button2"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:text="Button" />
  34. <Button
  35. android:id="@+id/button3"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"
  38. android:text="Button" />
  39. <Button
  40. android:id="@+id/button4"
  41. android:layout_width="wrap_content"
  42. android:layout_height="wrap_content"
  43. android:text="Button" />
  44. <Button
  45. android:id="@+id/button5"
  46. android:layout_width="wrap_content"
  47. android:layout_height="wrap_content"
  48. android:text="Button" />
  49. </LinearLayout>
  50. </HorizontalScrollView>
  51. </LinearLayout>

2. 垂直滚动条ScrollView

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

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

结构:

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

代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. 权重:控制宽度
  4. -->
  5. <!--xmlns给scrollview,因为这句话只有最外层的容器有-->
  6. <ScrollView
  7.     xmlns:android="http://schemas.android.com/apk/res/android"
  8.     android:layout_width="wrap_content"
  9.     android:layout_height="wrap_content"
  10.     >
  11.     <LinearLayout
  12.         android:orientation="vertical"
  13.         android:layout_width="match_parent"
  14.         android:layout_height="match_parent"
  15.         >
  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.         <Button
  49.             android:layout_width="wrap_content"
  50.             android:layout_height="100dp">
  51.         </Button>
  52.     </LinearLayout>
  53. </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<String> adapter = new ArrayAdapter<String>
  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<Fruit> {
  11. private int resourceId;
  12. public FruitAdapter(Context context, int textViewResourceId, List<Fruit> 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<Fruit> 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<Fruit> 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. }

效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/377308
推荐阅读
相关标签
  

闽ICP备14008679号