技术标签: adapter autojs 下拉框 spinner
牙叔教程 简单易懂
自定义下拉框spinner
git动图较大, 稍等片刻, 马上就好
8.8.12-0
spinner布局有两种
getView
生成getDropDownView
生成修改颜色和背景就和普通的UI修改一样
修改数据之后, 颜色又变回去了, 这是因为没有重新设置adapter
importClass(android.graphics.drawable.Drawable);
importClass("android.graphics.Rect");
importClass("android.graphics.NinePatch");
importClass("android.graphics.drawable.NinePatchDrawable");
importClass("android.graphics.BitmapFactory");
importClass("android.graphics.Bitmap");
ui.layout(
<vertical id="parent">
<text id="adv" marginTop="20" w="*" gravity="center" textSize="30sp" textStyle="bold"></text>
<button id="btn" margin="20">
切换选项
</button>
<spinner id="spinner" margin="36" entries="男|女|未知" />
</vertical>
);
ui.btn.click(function () {
var mCountries = ["中国", "美国", "日本"];
setAdapter(ui.spinner, mCountries);
});
let dataList = ["牙叔教程111", "牙叔教程222", "牙叔教程333"];
setAdapter(ui.spinner, dataList);
//设置下拉框默认的显示第一项
ui.spinner.setSelection(1);
let filePath = "./bili.9.png";
filePath = files.path(filePath);
let drawable = imageOperations(filePath);
function imageOperations(filePath) {
let bitmap = BitmapFactory.decodeFile(filePath);
let chunk = bitmap.getNinePatchChunk();
let npd = new NinePatchDrawable(context.getResources(), bitmap, chunk, new Rect(), null);
return npd;
}
getDropDownView 展开后的布局
getView 展开之前的布局
function getAdapter(dataList) {
let adapter = JavaAdapter(android.widget.SpinnerAdapter, {
getCount: function () {
return dataList.length;
},
getItem: function (position) {
return dataList[position];
},
getItemId: function (position) {
return position;
},
getViewTypeCount: function () {
return 1;
},
getItemViewType: function (pos) {
return 0;
},
getDropDownView: function (position, convertView, parent) {
if (!convertView) {
let boxXml = (
<frame>
<TextView id="_text" paddingTop="33dp" gravity="center" textColor="#f44336" textSize="20sp" />
</frame>
);
convertView = ui.inflate(boxXml);
convertView.attr("bg", "#00ff0000");
convertView.getChildAt(0).setBackgroundDrawable(drawable);
}
let item = dataList[position];
convertView.getChildAt(0).setText(item);
return convertView;
},
getView: function (position, convertView, parent) {
if (!convertView) {
let boxXml = <text id="name" textColor="#4caf50" gravity="center" textSize="20sp"></text>;
convertView = ui.inflate(boxXml);
}
let item = dataList[position];
convertView.setText(item);
return convertView;
},
});
return adapter;
}
公众号回复 自定义下拉框
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途
747748653
1.在APP中添加互斥量HANDLE m_hMutex;2.然后在InitInstance()中添加m_hMutex=::CreateMutex(NULL,FALSE,_T("应用程序名字(带App的例如CCSerPcieApp)")); if (GetLastError()==ERROR_ALREADY_EXISTS) { // AfxMessageBox("已经运行
util.inheritsutil.inherits(constructor,superConstructor)是一个实现对象间原型继承的函数。示例如下:var util=require('util');function Base(){ this.name='base'; this.base=2016; this.sayHello=function(){ co
1、版权和版本 ——————— 好的程序员会给自己的每个函数,每个文件,都注上版权和版本。 对于C/C++的文件,文件头应该有类似这样的注释: /************************************************************************ * * 文件名:network.c * * 文件描述:网络通讯函数集...
技改是技术改造的简称,是技术的蜕变。技术改造,对于公司和技术人员而言都非常难得,参与者多,主导者少。我有幸前后主导过3次OTA系统的技改,规模有大有小,每次环境和问题虽不一样,但还是有套路可循。 http://www.open-open.com/lib/view/open1472631729395.html
题目链接:https://www.luogu.org/problemnew/show/P2597首先一看到这道题可能感觉并没有什么思路,也很好联想到topo排序,但也应该很容易就发现topo是过不了的,例如样例。那么我们可以仔细观察一下样例构建出的图,会发现对于任意个点x,若它所有的食物灭绝了,那么它也一定要灭绝,而它所有食物灭绝的条件就是它们的lca灭绝了。所以我们可以把节点x连到它...
1.Hierarchy Viewer2.Lint(1)Hierarchy ViewerHierarchy Viewer是Android自带的一款可视化调试工具,用来检查Layout嵌套及绘制时间。以可视化的布局角度直观获取Layout布局设计和各种属性信息。注:由于Android安全考虑Hierarchy Viewer只能连接Android开发手机或模拟器。接下来介绍如何使用Hiera...
在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让大家产生困惑。本文将简单介绍这三种数据类型,并以股票信息为例,给出相关对象之间转换的具体示例。ndarray数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据; 描述这些数据的元数据。大部分的数组操作仅仅修改元数据部分,而不改变...
Quaternion.Slerpstatic Quaternion Slerp(Quaternion from, Quaternion to, float t);DescriptionSpherically interpolates between from and to by t.从from到to在t位置的球状插值using Uni
slink = ['','php 疑难问题1:本地文件缓存txt不完整','','php redis 多维数组操作']一、判断是否为列表格式:print(isinstance(变量,list))print(isinstance(slink,list))结果 :true说明为列表(list)false说明不是列表(list)二、获取类型print(type(slink))执行结果为:说明为列表类型三...
这里是C语言专栏重制版,笔者将定期更新C语言相关文章,让读者快速上手,并深入理解C语言。笔者在之前也有一些C语言和JAVA基础与进阶相关文章,感兴趣的读者可自行查看。本专栏是面向零基础或者刚刚入门又或者准备系统复习一下C语言的读者。也是为笔者本人考研的C语言打一个铺垫,未来与诸君共勉。希望大家读完文章都能有所收获。......
ExecuteNonQuery、ExecuteScalar、Dataset、ExecuteReader的不同意义和用法 1. ExecuteNonQuery 方法执行一个非查询语句( Update 、 Insert 、 Delete 等) 返回值是执行的影响行数,返回类型为int 例如: using (SqlCommand cmd = conn.CreateComma
数据是无价的,当我们删除数据时,多数情况下我们会采用设置数据不可见的方法来替代真正意义上的物理删除,这种删除方法就叫做“软删除”。软删除可以保留数据的历史记录,便于今后数据分析以及一些故障情况下的恢复,但软删除也随之带来一些问题:数据表唯一索引失效。# 唯一索引为什么会失效很好理解,当我们使用软删除方法时,实际上是将删除delete from table 变为了 update table,虽然对外...