autojs自定义下拉框

牙叔教程 简单易懂

使用场景

自定义下拉框spinner

效果展示

git动图较大, 稍等片刻, 马上就好
在这里插入图片描述

autojs版本

8.8.12-0

萌新三连问

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

疑问解答

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

完整源码

公众号回复 自定义下拉框

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值