測試
activity_main.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">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp"
android:text="隨機" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="10"
tools:listitem="@layout/layout_item" />
</LinearLayout>
item.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:padding="5dp"
android:text="xq"
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
class TestActivity :AppCompatActivity(){
private val dataList = ArrayList<String>()
private val colorList = ArrayList<Int>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initDataArray()
initColorArray()
//將正常的manager替換爲FlexboxLayoutManager
val layoutManager = FlexboxLayoutManager(this)
layoutManager.flexDirection = FlexDirection.ROW
layoutManager.justifyContent = JustifyContent.FLEX_START
layoutManager.alignItems = AlignItems.CENTER
rv.layoutManager = layoutManager
val adapter = FlexboxAdapter(this, dataList, colorList)
rv.adapter = adapter
btn.setOnClickListener {
adapter.notifyDataSetChanged()
}
}
private fun initColorArray() {
colorList.add(Color.RED)
colorList.add(Color.GREEN)
colorList.add(Color.BLUE)
colorList.add(Color.GRAY)
colorList.add(Color.DKGRAY)
colorList.add(Color.LTGRAY)
colorList.add(Color.CYAN)
colorList.add(Color.YELLOW)
colorList.add(Color.MAGENTA)
}
private fun initDataArray() {
dataList.add("1234567890abcd")
dataList.add("1234567890abcdefg")
dataList.add("1")
dataList.add("1234567890abcdefgh")
dataList.add("1234567890abcdefghij")
dataList.add("12345")
dataList.add("1234567890abcdefghijklmnop")
dataList.add("123456789")
dataList.add("1234567890abcdefghijklmn")
dataList.add("1234")
dataList.add("1234567890ab")
dataList.add("1234567890abcdefghi")
dataList.add("1234567890abc")
dataList.add("1234567890abcdefghijklmnopqrs")
dataList.add("1234567890abcdefghijk")
dataList.add("1234567890")
dataList.add("1234567890a")
dataList.add("12")
dataList.add("1234567890abcdefghijklm")
dataList.add("12345678")
dataList.add("123")
dataList.add("1234567890abcde")
dataList.add("123456")
dataList.add("1234567")
dataList.add("1234567890abcdefghijklmno")
dataList.add("1234567890abcdef")
dataList.add("1234567890abcdefghijkl")
}
}
private class FlexboxAdapter(
private val context: Context,
private val dataList: ArrayList<String>,
private val colorList: ArrayList<Int>
) : RecyclerView.Adapter<FlexboxAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view: View = LayoutInflater.from(context).inflate(R.layout.item, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.title.text = dataList[Random().nextInt(dataList.size)]
holder.title.setBackgroundColor(colorList[Random().nextInt(colorList.size)])
}
override fun getItemCount(): Int {
return dataList.size
}
internal inner class ViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
var title: TextView = itemView.findViewById(R.id.tvTitle)
}
}