android - 水平显示 Spinner 项目
问题描述
是否可以Spinner
水平或网格显示项目?一只手很难到达屏幕顶部。
class MainActivity : AppCompatActivity() {
private lateinit var adapterPlaces: AdapterPlaces
private lateinit var adapterAlphabet: AdapterAlphabet
private val arrayItemsPlaces = ArrayList<ItemPlaces>()
var list_of_items = arrayOf("A", "G", "H", "J", "S", "T", "V", "W")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mToolbar = findViewById<Toolbar>(R.id.myToolbar)
val mRecyclerViewV = findViewById<RecyclerView>(R.id.mRecyclerViewWithToolbarV)
val mSpinner = findViewById<Spinner>(R.id.mSpinner)
// ...Do other stuff here
setSupportActionBar(mToolbar)
val mTitle = findViewById<TextView>(R.id.myToolbar_title)
mTitle.text = "App"
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.atlantic_avenue_barclays_center)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.grand_central_42nd_street)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.howard_beach_jfk_airport)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.jackson_heights_roosevelt_avenue_74th_street)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.south_ferry_whitehall_street)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.sutphin_boulevard_archer_avenue_jfk_airport)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.times_square_42nd_street_port_authority_bus_terminal)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.van_cortlandt_park_242nd_street)
)
)
arrayItemsPlaces.add(
ItemPlaces(
getString(R.string.west_farms_square_east_tremont_avenue)
)
)
// Set Vertical RecyclerView
mRecyclerViewV.layoutManager =
LinearLayoutManager(this)
val mListener = AdapterView.OnItemClickListener { _, _, _, _ -> }
adapterPlaces = AdapterPlaces(arrayItemsPlaces, mListener)
mRecyclerViewV.addItemDecoration(
androidx.recyclerview.widget.DividerItemDecoration(
this,
LinearLayout.VERTICAL
)
)
mRecyclerViewV.adapter = adapterPlaces
val mListener = AdapterView.OnItemClickListener { _, _, _, _ -> }
adapterAlphabet = AdapterAlphabet(arrayItemsBtns, mListener)
// Set spinner items
val aa = ArrayAdapter(this, android.R.layout.select_dialog_item, list_of_items)
aa.setDropDownViewResource(android.R.layout.select_dialog_item)
mSpinner!!.setAdapter(aa)
}
}
解决方案
我相信这就是您正在寻找的:HorizontalSpinner。爪哇
笔记。这会创建所有关于创建的视图(无回收),因此较大的列表很可能需要一个具有视图回收的解决方案。
但是,通过 Google 的 Codelab 在 Custom Views 上自己创建一个简单的自定义视图并没有那么复杂(并且可能是一个值得探索的有趣话题)。在这种情况下,您可以从 RecyclerView 继承并自己创建一个性能良好的水平微调器(然后将其作为库发布以与世界共享 :)
推荐阅读
- domain-driven-design - 如何在 CQRS 中更新我的视频阅读模型
- git - 如何确定git中哪个模块是另一个模块的子模块?
- job-scheduling - 是否可以从交互式 PBS 作业中“分离”?
- openshift - open shift 不返回新部署应用程序的分解配置
- python - 使用 matplotlib 绘制单独的直方图
- python - 按月将日期数组拆分为多个列表
- google-sheets - ARRAYFORMULA MMULT TRANSPOSE 给出错误的计算结果
- java - 如何在 Android 的轮播中随 ImageView 的变化而改变 TextView
- flutter - 在颤振中收到 Firebase 通知或本地通知时启动我的应用程序
- javascript - 如何将 javascript 变量从 HTML 导入另一个 js 文件?