Android Kotlin初学者求助:实现PickerView及适配Java库的源码方案
在Kotlin项目中使用Android-PickerView实现选择器视图
嗨,作为Kotlin初学者遇到Java库的使用问题很正常,其实Java库在Kotlin项目里完全可以无缝使用,我给你整理了一套完整的实现方案,包含两种常见的PickerView样式(嵌入布局和弹窗,后者更贴近你给出的示例图),直接跟着步骤来就行:
1. 先添加库依赖
打开你项目的Module级别的build.gradle文件(不是根目录的那个),在dependencies块里加入以下依赖:
dependencies { implementation 'com.contrarywind:Android-PickerView:4.1.9' }
(注:可以去库的仓库看最新版本号,这里用的是稳定版)
同时确保项目开启Java8支持,在同一个build.gradle的android块里添加:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }
2. 实现两种PickerView样式
方式一:嵌入布局的PickerView
先在布局文件(比如activity_main.xml)里添加控件:
<?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="match_parent" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/togglePickerBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="切换选择器显示"/> <com.contrarywind.view.WheelPickerView android:id="@+id/embeddedPickerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"/> </LinearLayout>
然后在MainActivity.kt里编写逻辑:
import android.os.Bundle import android.view.View import android.widget.Button import androidx.appcompat.app.AppCompatActivity import com.contrarywind.adapter.ArrayWheelAdapter import com.contrarywind.listener.OnItemSelectedListener import com.contrarywind.view.WheelPickerView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val embeddedPicker = findViewById<WheelPickerView>(R.id.embeddedPickerView) val toggleBtn = findViewById<Button>(R.id.togglePickerBtn) // 准备你的选择数据源 val cityList = listOf("北京", "上海", "广州", "深圳", "杭州", "成都", "武汉") // 设置适配器,Kotlin的List可以直接传给Java适配器 embeddedPicker.setAdapter(ArrayWheelAdapter(cityList)) // 选中项监听 embeddedPicker.setOnItemSelectedListener(object : OnItemSelectedListener { override fun onItemSelected(index: Int) { android.widget.Toast.makeText(this@MainActivity, "选中了:${cityList[index]}", android.widget.Toast.LENGTH_SHORT).show() } }) // 按钮控制显示/隐藏选择器 toggleBtn.setOnClickListener { embeddedPicker.visibility = if (embeddedPicker.visibility == View.VISIBLE) View.GONE else View.VISIBLE } } }
方式二:弹窗式PickerView(更贴近示例图)
这种样式是从底部弹出的选择器,不需要在布局里提前写控件,直接在代码中创建:
修改MainActivity.kt的逻辑(替换上面的代码或者新增按钮):
import android.os.Bundle import android.widget.Button import androidx.appcompat.app.AppCompatActivity import com.contrarywind.view.OptionsPickerView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val showPopupBtn = findViewById<Button>(R.id.showPopupBtn) val cityList = listOf("北京", "上海", "广州", "深圳", "杭州", "成都", "武汉") // 创建弹窗选择器 val popupPicker = OptionsPickerView.Builder(this) { options1, _, _, _ -> // 选中后的回调逻辑 val selectedCity = cityList[options1] android.widget.Toast.makeText(this@MainActivity, "选中城市:$selectedCity", android.widget.Toast.LENGTH_SHORT).show() } .setTitleText("选择城市") // 设置标题 .setContentTextSize(18) // 选项文字大小 .setTitleTextSize(20) // 标题文字大小 .setSelectOptions(0) // 默认选中第一项 .build<String>() // 设置选择数据 popupPicker.setPicker(cityList) // 按钮点击弹出选择器 showPopupBtn.setOnClickListener { popupPicker.show() } } }
一些自定义技巧
如果你想调整选择器的样式,比如选中项的高亮颜色、取消/确定按钮文字等,都可以通过OptionsPickerView.Builder的链式方法设置,比如:
OptionsPickerView.Builder(this) { ... } .setTitleColor(R.color.black) .setCancelText("取消") .setConfirmText("确定") .setSelectTextColor(R.color.blue) .build<String>()
内容的提问来源于stack exchange,提问作者GPH
相关产品推荐
相关产品推荐

