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

声明

部分内容来自网络

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

相关文章
|
JavaScript
Fastadmin列表的多图预览(一行代码)
Fastadmin列表的多图预览(一行代码)
375 0
|
Android开发
autojs按钮不可点击
牙叔教程 简单易懂
1102 0
|
6月前
利用 HBuilderX 设置公司简介页面
利用 HBuilderX 设置公司简介页面
125 2
利用 HBuilderX 设置公司简介页面
|
4月前
uniapp 添加自定义图标
uniapp 添加自定义图标
186 0
|
缓存 Java Maven
为网站设置欢迎页面和自定义网站的图标教程~
为网站设置欢迎页面和自定义网站的图标教程~
|
JavaScript
fastadmin如何自定义一个列表上的按钮。
fastadmin如何自定义一个列表上的按钮。
353 0
|
XML Java Android开发
autojs自定义控件-导航栏
目前自定义控件可以控制的属性: ● 颜色 ● 宽度 ● 图片宽高 ● 绑定viewpager recyclerview的高度是由 文字 + 图片 控制的, 所以就不用设置recyclerview的高度
699 0
|
存储 XML 缓存
Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果)、自定义背景图片、UI优化调整
Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果)、自定义背景图片、UI优化调整
213 0
Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果)、自定义背景图片、UI优化调整
|
Android开发
autojs对话框修改样式
牙叔教程 简单易懂
291 0