autojs自定义下拉框
2021-06-19 本文已影响0人
牙叔教程
牙叔教程 简单易懂
使用场景
自定义下拉框spinner
效果展示
git动图较大, 稍等片刻, 马上就好
效果.gif
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;
}
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途