一、效果图
二、主要布局文件
activity_main.xml
<RelativeLayout 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" tools:context=".MainActivity" > <TextView android:id="@+id/tv_provincename" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_width="200dp" android:layout_height="38dp" android:background="@drawable/edittext_backgroud" android:drawableRight="@drawable/title_down" android:gravity="center" android:hint="请选择省份" android:maxLines="1" android:paddingLeft="8.5dp" android:singleLine="true" /> </RelativeLayout>
commom_single_list_select.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="wrap_content" android:gravity="center" android:orientation="vertical" > <kankan.wheel.widget.WheelView android:id="@+id/select_item_wheel" android:layout_width="match_parent" android:layout_height="wrap_content" android:minWidth="360dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:orientation="horizontal" > <Button android:id="@+id/cancel_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" /> <Button android:id="@+id/ok_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="确定" /> </LinearLayout> </LinearLayout>
wheel_list_item_common.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:orientation="vertical" > <TextView android:id="@+id/wheel_item_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="20sp" android:textStyle="bold" /> </LinearLayout>
MainActivity.java
package com.example.wheeltest; import java.util.ArrayList; import java.util.List; import kankan.wheel.widget.WheelView; import kankan.wheel.widget.adapters.WheelViewAdapter; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.TextView; public class MainActivity extends Activity { private View provinceNameAlertView; private View provinceNameOkView; private View provinceNameCancleView; private TextView mProvinceTV; private WheelView provinceNameWheelView; private AlertDialog mProvinceNameAd; private WheelViewAdapter provinceAdapter; private List<ProvinceInfoBean> provinceList; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; setContentView(R.layout.activity_main); dataInit(); viewInit(); } private void dataInit(){ provinceList = new ArrayList<ProvinceInfoBean>(); ProvinceInfoBean bean1 = new ProvinceInfoBean(); bean1.setId(1); bean1.setName("北京市"); ProvinceInfoBean bean2 = new ProvinceInfoBean(); bean2.setId(2); bean2.setName("天津市"); ProvinceInfoBean bean3 = new ProvinceInfoBean(); bean3.setId(3); bean3.setName("上海市"); ProvinceInfoBean bean4 = new ProvinceInfoBean(); bean4.setId(4); bean4.setName("广东省"); provinceList.add(bean1); provinceList.add(bean2); provinceList.add(bean3); provinceList.add(bean4); } private void viewInit(){ mProvinceTV = (TextView) findViewById(R.id.tv_provincename); provinceNameAlertView = LayoutInflater.from(mContext).inflate(R.layout.common_single_list_select, null); provinceNameWheelView = (WheelView) provinceNameAlertView.findViewById(R.id.select_item_wheel); provinceNameOkView = provinceNameAlertView.findViewById(R.id.ok_btn); provinceNameCancleView = provinceNameAlertView.findViewById(R.id.cancel_btn); mProvinceNameAd = new AlertDialog.Builder(mContext) .setTitle("请选择省份") .setView(provinceNameAlertView).create(); provinceAdapter = new ProvinceAdapter(); provinceNameWheelView.setViewAdapter(provinceAdapter); mProvinceTV.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(!mProvinceNameAd.isShowing()){ mProvinceNameAd.show(); } } }); provinceNameOkView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(provinceList != null && !provinceList.isEmpty()){ int index = provinceNameWheelView.getCurrentItem(); ProvinceInfoBean bean = provinceList.get(index); mProvinceTV.setText(bean.getName()); } if(mProvinceNameAd.isShowing()){ mProvinceNameAd.dismiss(); } } }); provinceNameCancleView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(mProvinceNameAd.isShowing()){ mProvinceNameAd.dismiss(); } } }); } private final class ProvinceAdapter implements WheelViewAdapter{ @Override public int getItemsCount() { // TODO Auto-generated method stub return provinceList.size(); } @Override public View getItem(int index, View convertView, ViewGroup parent) { // TODO Auto-generated method stub convertView = LayoutInflater.from(mContext).inflate(R.layout.wheel_list_item_common, null); TextView textView = (TextView) convertView.findViewById(R.id.wheel_item_text); ProvinceInfoBean bean = provinceList.get(index); textView.setText(bean.getName()); return convertView; } @Override public View getEmptyItem(View convertView, ViewGroup parent) { // TODO Auto-generated method stub return null; } @Override public void registerDataSetObserver(DataSetObserver observer) { // TODO Auto-generated method stub } @Override public void unregisterDataSetObserver(DataSetObserver observer) { // TODO Auto-generated method stub } } }
三、需要用到额外的项目包wheel 和 源代码
相关推荐
一个动态的弹出框,可以做动态提示什么的,自定义布局放入就可以。使用非常简单,并且做了性能上的优化,内存占用较小。但是发现个长时间弹出内存会升高,暂未发现原因
本项目聚焦于创建一个“仿ios的弹出框”,其中包括城市滚轮的三级联动选择以及日期滚轮效果。这个自定义的`Dialog`控件能够帮助开发者轻松地在Android应用中集成这些特性,从而提升用户界面的美观度和操作便捷性。 ...
本教程将深入探讨如何自定义一个底部弹出的滚轮选择器。 一、滚轮选择器的基本概念 滚轮选择器通常由一系列可视元素组成,用户可以滚动这些元素来选择特定的值。在Android中,我们可以使用Android SDK中的`Number...
在网页设计中,弹出框是一种常见的用户交互元素,用于展示图片、信息提示或者表单输入等。jQuery库以其强大的DOM操作和事件处理能力,成为了实现此类功能的首选工具。本篇文章将详细探讨一个名为"jquery.popImage"的...
`PopupWindow`常用于创建底部弹出框,而`WheelView`则是一个可滚动的选择器,通常用于日期选择、时间选择等场景。下面将详细介绍这两个组件的使用方法以及如何将它们结合在实际应用中。 ### 1. PopupWindow详解 `...
不过,需要注意的是,如果当前记录已被修改但未保存,代码会弹出消息框提示用户保存更改,以防止数据丢失。 总的来说,通过利用Access的VBA功能,我们可以自定义窗体的行为,提升用户体验。对于那些经常需要在...
本教程将围绕"Unity编辑器——日期选择窗口插件"这一主题展开,详细讲解如何创建一个在编辑器内部弹出的日历选择窗口,以方便用户在制作游戏或应用时选取日期。这涉及到Unity的EditorWindow类、GUI系统以及可能的...
3. **交互逻辑**:可能增加了手势识别,比如双击选择当前日期,长按弹出更多选项等。 4. **功能扩展**:可能添加了预设日期选择、限制可选日期范围等功能,增强控件的实用性。 5. **适配多语言和文化**:根据不同的...
5、单击Add-Ins菜单下的Add-In Manager,弹出Add-In Manger对话框 6、在Available Add-Ins列表中,选择“MouseWheel Fix”,在Load Behavior栏中单击选中"Loaded/Unloaded和Load on Startup复选框 7、确定,完成
- **交互设计**:当柱状图滚动到中间位置时,可以弹出一个提示框或者悬浮标签显示当前选中的数值,同时提供点击事件监听,允许用户进一步查看详细信息。 - **性能优化**:由于柱状图可能包含大量数据,为了保证流畅...
File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) —> 在弹出的对话框中选择Add Mouse Shortcut 在弹出的对话框中同时按住ctrl键和鼠标滚轮向上滑。 二、Pycharm字体缩小...
在原始的帆软报表系统中,当鼠标悬停在单元格上时,通常会弹出一个简单的提示框显示单元格的内容。然而,这种提示可能因为字体小、颜色单一或显示不全等问题,使得快速理解和分析数据变得困难。【帆软单元格内容提示...
3. **确认警告信息**:进入该页面后,系统会弹出一个警告窗口,提示这些设置可能会带来未知的风险。点击“我保证会小心”按钮继续。 #### 步骤二:调整滚轮滚动行为 1. **查找配置项**:在打开的页面中,你会看到...
我相信绝大多数小伙伴在自学python时,运用...1.打开pycharm中左上角找到File->setting->Keymap->搜索框中输入:Increase Font Size(双击选中)->弹出对话框时选择Add Mouse Shortcut(单击) 在弹出如上对话框时,同时
"WheelViewDemo-master.zip" 是一个专门针对自定义实现`WheelView`滑动选择器的项目压缩包,它提供了丰富的功能,包括底部弹出框以及时间选择器,能够支持年、月、日、时、分、秒的选择,方便开发者在应用中集成日期...
8. UI优化:为了提升用户体验,需要考虑键盘弹出时对布局的影响,可能需要使用`ScrollView`或`NestedScrollView`来处理滚动行为。 9. 可访问性:确保自定义组件遵循Android的可访问性指南,支持屏幕阅读器和其他...
* Alt + F8:在 Debug 的状态下,选中对象,弹出可输入计算表达式调试框,查看该输入内容的调试结果 * Alt + Home:定位/显示到当前文件的 Navigation Bar * Alt + Enter:IntelliJ IDEA 根据光标所在问题,提供快速...