首页 文章 精选 留言 我的

精选列表

搜索[颜色选择器],共7104篇文章
优秀的个人博客,低调大师

Android开发之GridView实现弹出式选择器

前段时间,写了一个小项目,里面有个界面如下图所示,之前的版本是用Spinner来做,觉得不够拉轰,所以采用GridView做了一个实现,效果还不错,Mark一下。 弹出单选GridView.png 一、点击那个底部的绿色按钮,弹出一个对话框,对话框里面的内容是一个单选的GridView,关键代码如下: //add_pay就是底部那个按钮 add_pay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog alertDialog = new AlertDialog.Builder(AddActivity.this) .setView(getChoiceView(2)) .create(); alertDialog.show(); } }); 上面的重点是那个getChoiceView(2),因为我有好几个数据源,所以就用一个int类型参数的type来区分一下,不同的type取不同的数据源展示。 二、getChoiceView方法,主要是加载布局,初始化GridView,然后设置Adapter和点击事件,比较简单,关键代码如下: private View getChoiceView(final int type) { //R.layout.dialog_choice就是GridView所在的那个布局,下面有介绍 View view = LayoutInflater.from(AddActivity.this).inflate(R.layout.dialog_choice, null); GridView gv = (GridView) view.findViewById(R.id.gv); //GridView的数据源,直接从strings.xml中加载过来 List<String> data; //自定义适配器 final MyAdapter adapter; //判断类型,加载数据源设置Adapter if (type == 1) { data = Arrays.asList(getResources().getStringArray(R.array.event)); adapter = new MyAdapter(this, data); gv.setAdapter(adapter); //设置默认选中 adapter.changeState(eventSelected); } else { data = Arrays.asList(getResources().getStringArray(R.array.pay)); adapter = new MyAdapter(this, data); gv.setAdapter(adapter); adapter.changeState(paySelected); } //监听点击事件,点击以后,之前的选中应该变为未选中 gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (type == 1) { eventSelected = position; //将选择的内容设置到底部的按钮上去 add_event.setText(eventArray.get(position).toString()); } else { paySelected = position; add_pay.setText(payArray.get(position).toString()); } alertDialog.dismiss(); adapter.changeState(position); } }); return view; } 三、dialog_choice 与 choice_item布局,非常简单 GridView所在的布局如下: <?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:background="@color/white" android:gravity="center" android:orientation="vertical"> <GridView android:id="@+id/gv_choice" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:horizontalSpacing="15dp" android:listSelector="@color/transparent" android:numColumns="2" //2列 android:verticalSpacing="15dp"></GridView> </LinearLayout> GridView中每个item的布局如下: <?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/tv_choice" android:layout_width="match_parent" android:layout_height="40dp" android:button="@null" android:gravity="center" android:paddingBottom="10dp" android:paddingTop="10dp" android:textColor="@color/white" /> </LinearLayout> 四、MyAdapter继承自BaseAdapter,关键是弄一个记录选中与否的ArrayList,默认初始化的时候都是未选中,然后设置一个方法能修改选中项,在getView中根据选中与否,来设置背景色 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.choice_item, null); viewHolder.title = (TextView) convertView.findViewById(R.id.tv_choice); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (!"".equals(data.get(position))) { viewHolder.title.setText(data.get(position)); } if (list.get(position) == true) { viewHolder.title.setBackgroundDrawable(activity.getResources() .getDrawable(R.drawable.choice_item_bg_selected)); } else { viewHolder.title.setBackgroundDrawable(activity.getResources() .getDrawable(R.drawable.choice_item_bg_default)); } return convertView; } /** * 修改选中时的状态 * * @param position */ public void changeState(int position) { if (lastPosition != -1) { list.set(lastPosition, false);// 取消上一次的选中状态 } list.set(position, !list.get(position));// 设置这一次的选中状态 lastPosition = position; // 记录本次选中的位置 notifyDataSetChanged(); // 通知适配器进行更新 } 最终效果 演示.gif

优秀的个人博客,低调大师

回顾 30 年前的 IDE:只有 TUI、背景颜色亮瞎眼……

当谈到 30 年前的集成开发环境 (IDE),纯文本模式大行其道。在 20 世纪 80 年代末/90 年代初,DOS 操作系统上的 IDE 都是基于文本用户界面 (TUI)。这些 IDE 虽然没有图形界面,但却提供了一些令人印象深刻的功能,让程序员们能够进行编码、编译和调试他们的程序。 比如 MS-DOS 自带的编辑器 EDIT.COM。这是一个全屏 TUI 编辑器,提供了菜单栏、对话框、状态栏等功能。虽然不太适合编码,但它展示了当时的技术水平。 另一个经典的 IDE 是 Borland Turbo 系列,比如 Turbo C++。这些 IDE 提供了语法高亮、编译器集成、调试器、项目管理等功能,甚至还有完整的参考手册。这些功能在当时来说非常先进,让程序员们能够在没有互联网的情况下完成整个开发过程。 (语法高亮) (集成编译器和诊断) (集成项目和构建系统管理) (包含断点、堆栈跟踪等功能的调试器) (完整的使用手册) 有人表示,Bordland 在当时出品的 IDE 确实十分惊艳,但在使用 Bordland Turbo C++ 一段时间后,眼睛都要被亮瞎了…… 与此同时,Linux 上的 IDE 并不如 DOS 上的 IDE 那么成熟。虽然也有一些文本模式的程序,比如 Vim 和 Emacs,但它们并不像 Borland Turbo 系列那样提供完整的集成开发环境。这导致了在当时许多程序员还是更倾向于使用 DOS 上的 IDE 进行开发。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册