牙叔教程 简单易懂
使用场景
自定义下拉框spinner
效果展示
git动图较大, 稍等片刻, 马上就好
autojs版本
8.8.12-0
萌新三连问
- 我要改背景
- 我要改字体颜色
- 我改了下拉框数据, 怎么颜色又变回去啦
疑问解答
spinner布局有两种
- 未展开之前的布局, 由
getView
生成 - 展开之后的布局, 由
getDropDownView
生成
修改颜色和背景就和普通的UI修改一样
修改数据之后, 颜色又变回去了, 这是因为没有重新设置adapter
代码讲解
1. 导入类
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");
2. 布局
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> );
3.点击按钮, 切换数据
ui.btn.click(function () { var mCountries = ["中国", "美国", "日本"]; setAdapter(ui.spinner, mCountries); });
4. 设置下拉框默认数据
let dataList = ["牙叔教程111", "牙叔教程222", "牙叔教程333"]; setAdapter(ui.spinner, dataList); //设置下拉框默认的显示第一项 ui.spinner.setSelection(1);
5. 获取九图背景
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; }
SpinnerAdapter
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; }
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途