了解Android_08之ListView(列表视图)
一、ListView(列表视图)是一种什么样的效果?
ListView(列表视图)可以将自定义的布局根据一定数量显示在屏幕上。
比如:
其中:一张图片和文字就是自定义的布局样式:
<?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="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/iv1" android:layout_width="100dp" android:layout_height="100dp" android:background="#000" android:scaleType="centerCrop" /> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试文字" android:textSize="24sp" android:layout_marginLeft="20dp" android:layout_marginTop="40dp" /> </LinearLayout>
二、ListView如何展示样式?
<ListView android:id="@+id/lv1" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="@drawable/listview" />
其中:listSelector是自定义的一个按压效果:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/colorRed"/> <item android:state_pressed="true" android:drawable="@color/colorRed"/> <item android:state_focused="true" android:drawable="@color/colorRed"/> </selector>
ListView主要还是通过Java代码来控制:
package com.example.listviewdemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.bumptech.glide.Glide; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv1 = findViewById(R.id.lv1); lv1.setAdapter(new MyListViewAdapter(this)); //将自定义适配器作为参数传入 lv1.setOnItemClickListener(new AdapterView.OnItemClickListener(){ //单机事件 @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { System.out.println("item:"+i+" 单击 "+l); } }); lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { //长按事件 @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { System.out.println("item:"+i+"长按 "+l); return true; //true为长按后阻止其它事件发生 } }); } private class MyListViewAdapter extends BaseAdapter{ //继承一个基本的适配器(BaseAdapter) private Context mLVAContext; //上下文 private LayoutInflater mLVALayoutInflater; //布局服务用于从上下文(context)中获取View视图 public MyListViewAdapter(Context context){ this.mLVAContext = context; //获取上下文 this.mLVALayoutInflater = LayoutInflater.from(context); //从上下文中获取布局服务,将来可以获取View视图 } @Override public int getCount() { //将自定义的布局显示6次 return 6; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { view = mLVALayoutInflater.inflate(R.layout.listview_item,null); //获取自定义布局listview_item的视图 ImageView iv1 = view.findViewById(R.id.iv1); //获取自定义布局listview_item中的组件 TextView tv1 = view.findViewById(R.id.tv1); //获取自定义布局listview_item中的组件 tv1.setText("被设置后的文本效果"); //设置组件内容 //设置图片地址 Glide.with(this.mLVAContext).load("https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1604332215&t=cb2b5ed8ce723d4117196f3ee207a001").into(iv1); return view; } } }
三、最后实现效果: