You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:36