autojs自定义下拉框

牙叔教程 简单易懂

使用场景

定义下拉框spinner

效果展示

git动图较大, 稍等片刻, 马上就好

autojs自定义下拉框

autojs版本

8.8.12-0

萌新三连问

  1. 我要改背景
  2. 我要改字体颜色
  3. 我改了下拉框数据, 怎么颜色又变回去啦

疑问解答

spinner布局有两种

  • 未展开之前的布局, 由getView生成
  • 展开之后开发工具不能用的布局, 由getDropDownView生成

修改颜色和背景就和普通的UI修改一样

修改数据之后, 颜色又变回去了, 这是因为没有重新设置adapter

代码讲解

1. 导入
importClass(android.graphics.drawable.Drawable);
importClass(�34;android.graphics.Rect�34;);
importClass(�34;android.graphics.NinePatch");
importClass("android.graphics.drawable.NinePatchDrawable");
importClass("android.graphics.BitmapFactory");
importClass("android.graphics.Bitmap");
2. 布git命令
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 展开后的布局

get开发工具是什么意思View 展开之前的布局

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;
}

完整源码

公众号回复 自定义下拉框

声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途