ViewItem的布局,图片与文字上下排列
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="5dp">
<ImageView
android:id="@+id/fruitImage"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/fruitName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"/>
</LinearLayout>
Activity的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id = "@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text = "hello_fruits"
android:textSize = "18sp"/>
<androidx.recyclerview.widget.RecyclerView
android:id = "@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
主Acitivity Kotlin 代码:
package com.example.recyclerview2
import android.app.Activity
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import kotlinx.android.synthetic.main.activity_main.*
import org.w3c.dom.Text
class Fruit(val name:String, val imageID:Int){
}
class FruitAdapter(val fruitList: List<Fruit>): RecyclerView.Adapter<FruitAdapter.ViewHolder>(){
inner class ViewHolder(view:View):RecyclerView.ViewHolder(view){
val image :ImageView =view.findViewById(R.id.fruitImage)
val name:TextView = view.findViewById(R.id.fruitName)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType:Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.fruit_item, parent, false)
val viewHolder = ViewHolder(view)
//RecyclerView 的点击事件
viewHolder.itemView.setOnClickListener{
val position = viewHolder.adapterPosition
val fruit = fruitList[position]
Toast.makeText(parent.context, fruit.name +"," + position.toString(), Toast.LENGTH_SHORT).show()
}
return viewHolder
}
override fun onBindViewHolder(holder: ViewHolder, position:Int){
val fruit = fruitList[position]
holder.image.setImageResource(fruit.imageID)
holder.name.text = fruit.name
}
override fun getItemCount() = fruitList.size
}
class MainActivity : AppCompatActivity() {
private val fruitList = ArrayList<Fruit>()
//字典的定义
private val nameImageMap = mapOf("Apple(苹果)" to R.drawable.apple_pic,
"Banana(香蕉)" to R.drawable.banana_pic,
"Cherry(樱桃)" to R.drawable.cherry_pic,
"Grape(葡萄)" to R.drawable.grape_pic,
"Mango(芒果)" to R.drawable.mango_pic,
"Orange(橙子)" to R.drawable.orange_pic,
"Pear(梨子)" to R.drawable.pear_pic,
"Pineapple(菠萝)" to R.drawable.pineapple_pic,
"Strawberry(草莓)" to R.drawable.strawberry_pic,
"Watermelon(西瓜)" to R.drawable.watermelon_pic)
//public val textView:TextView = findViewById(R.id.textView)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initFruits() // 初始化水果列表
//实现水平滚动效果
//val layoutManager = LinearLayoutManager(this)
//layoutManager.orientation = LinearLayoutManager.HORIZONTAL //ViewItem 内部空间水平排列(默认竖直)
//实现瀑布流效果
val layoutManager = StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)
recyclerView.layoutManager = layoutManager
val adapter = FruitAdapter(fruitList)
recyclerView.adapter = adapter
}
private fun getRandomLength(str:String):String {
//重复字符串 随机1到5次。
val n = (1..5).random()
val builder = StringBuilder()
repeat(n){
builder.append(str)
}
return builder.toString()
}
private fun initFruits(){
repeat(4){
for((name, image) in nameImageMap){
//字典键值对的循环
fruitList.add(Fruit(getRandomLength(name), image))
}
}
}
}
AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.recyclerview2">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.RecyclerView2">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
题外:如何生成Android安装文件(.APK) ?
编译好之后,Event log 里点击 locate可以找到该安装文件。
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!