控件父类

  • 更新时间:2025-12-02 10:12:48

控件父类-XView

在应用中所有的控件或者布局都是这个类{XView}的子类,因此,这个类中的所有方法,所有的子类都能调用,故称为:公共方法。

在代码示例中,多数情况下,我都是使用{XButton}按钮控件来进行演示的,其实任何控件都可以。

getView()

获得安卓原生视图 我们可以通过控件的getView()方法获得原生控件,从而进行原生操作 对于[button]标签,对应的原生类就是[MaterialButton] 对于[text]标签,对应的原生类就是[MaterialTextView]其余的请参考原生对照表

  • 返回 : {View} 安卓原生View

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件:{XButton}类型
let mButton = ui.id("mButton");//{XButton}属于{XView}的子类
//获得原生控件
let view = mButton.getView();//{MaterialButton}对象
//需要注意:在后续操作安卓原生对象的时候需要放在ui线程中进行
$ui.run(()=>{
    view.setText("我是新的按钮");
});
//如果不操作原生控件,我们已经封装过ui线程这一步了,可以直接在其他线程中操作
mButton.setText("我是新的按钮");

getName()

获取组件的节点名称

  • 返回 : {string} 组件节点名称

  • 版本 : 1.5.5

parseColor(color)

解析颜色

可以通过这个函数获得主题颜色值或者一些常用颜色值

  • 参数 : color {string} 颜色名称

  • 返回 : {int} 颜色值

let ui = $ui.layout("/ui.xml");
id myButton = ui.id("myButton");
//获取颜色值(返回int类型的颜色值)
let color = myButton.parseColor("white");
let color = myButton.parseColor("black");
let color = myButton.parseColor("null");
let color = myButton.parseColor("none");
let color = myButton.parseColor("green");
let color = myButton.parseColor("red");
let color = myButton.parseColor("blue");
let color = myButton.parseColor("yellow");
//主题颜色值(返回int类型的颜色值)
let color = myButton.parseColor("colorPrimary");//(常用)一般是主题最明显的颜色
let color = myButton.parseColor("colorSurface");//(常用)一般是背景颜色:亮色主题一般呈现白色,暗色主题一般呈现黑色
let color = myButton.parseColor("colorOnSurface");//(常用)一般是文字颜色:亮色主题一般呈现黑色,暗色主题一般呈现白色
let color = myButton.parseColor("colorOnPrimary");
let color = myButton.parseColor("colorPrimaryContainer");
let color = myButton.parseColor("colorOnPrimaryContainer");
let color = myButton.parseColor("colorSecondary");
let color = myButton.parseColor("colorOnSecondary");
let color = myButton.parseColor("colorSecondaryContainer");
let color = myButton.parseColor("colorOnSecondaryContainer");
let color = myButton.parseColor("colorTertiary");
let color = myButton.parseColor("colorOnTertiary");
let color = myButton.parseColor("colorTertiaryContainer");
let color = myButton.parseColor("colorOnTertiaryContainer");
let color = myButton.parseColor("colorError");
let color = myButton.parseColor("colorErrorContainer");
let color = myButton.parseColor("colorOnErrorContainer");
let color = myButton.parseColor("colorOnBackground");
let color = myButton.parseColor("colorSurfaceVariant");
let color = myButton.parseColor("colorOnSurfaceVariant");
let color = myButton.parseColor("colorOutline");
let color = myButton.parseColor("colorOutlineVariant");
let color = myButton.parseColor("colorPrimaryInverse");

dp(dp)

将dp转换成对用的px

  • 参数 : dp {float} dp长度

  • 返回 : {float} px长度

bgImg(path)

设置背景图片

  • 参数 : path {string} 图片路径

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置背景图片
mButton.bgImg("./res/bg.png");

snack(msg)

显示 Snackbar

  • 参数 : msg {string} 信息

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//显示信息条
mButton.snack("我是信息");

snack(msg, title, callback)

显示 Snackbar

  • 参数 : msg {string} 信息

  • 参数 : title {string} action标题

  • 参数 : callback {(view)=>{}} 点击事件回调

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//显示信息条
mButton.snack("我是信息","确定",(view)=>{
    //点击确定触发的事件
    toast("点击了确定");
});

click(callback)

设置点击事件

  • 参数 : callback {(view)=>{}} 点击事件

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置点击事件
mButton.click((view)=>{
    //点击事件
    toast("我被点击了");
});

longClick(callback)

设置长按事件

  • 参数 : callback {(view)=>{}} 点击事件

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置长按事件
mButton.longClick((view)=>{
    //点击事件
    toast("我被长按了");
});

popup(titles, callback)

显示选项菜单

  • 参数 : titles {string[]} 选项

  • 参数 : callback {(title)=>{}} 回调

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//显示选项菜单
mButton.popup(["选项1","选项2","选项3"],(title)=>{
    toast("点击了选项:"+title);
});

popup(titles, gravity, callback)

显示选项菜单

  • 参数 : titles {string[]} 选项

  • 参数 : gravity {string} 重力,例如:"center|start"(默认值)

  • 参数 : callback {(title)=>{}} 回调

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//显示选项菜单
mButton.popup(["选项1","选项2","选项3"],"start|center",(title)=>{
    toast("点击了选项:"+title);
});

setEnabled(enabled)

是否启用控件

  • 参数 : enabled {boolean} true:启用,false:禁用

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//禁用
mButton.setEnabled(false);

isEnabled()

判断可用

  • 返回 : {boolean} true:启用,false:禁用

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//是否可用
let is = mButton.isEnabled();
if(is){
    toast("可用");
}

setVisibility(visibility)

设置可见性

  • 参数 : visibility (使用AgUi中的常量,例如:ui.INVISIBLE)

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置成不可见
mButton.setVisibility($ui.GONE);
//设置成可见
//mButton.setVisibility($ui.VISIBLE);

isVisibility()

获得可见性

  • 返回 : {int} (使用AgUi中的常量,例如:ui.INVISIBLE)

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获得可见性的值
let vis = mButton.isVisibility();
if(vis==$ui.VISIBLE){
    toast("可见");
}

setFocusable(focusable)

设置可聚焦

  • 参数 : focusable {boolean} true:控件可获得焦点,false:控件不可获得焦点

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置控件是否可聚焦
mButton.setFocusable(true);

setClickable(clickable)

设置可点击

  • 参数 : clickable {boolean} true:控件可被点击,false:控件不可被点击

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置控件是否可点击
mButton.setClickable(true);

setAlpha(alpha)

设置透明度

  • 参数 : alpha {float} 0.5:控件半透明,1:控件不透明

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置透明度
mButton.setAlpha(0.5);

getAlpha()

获得透明度

  • 返回 : {float} 控件透明度值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获得透明度
let alpha = mButton.getAlpha();

setElevation(elevation)

设置立体值

可以让控件看起来更加立体

  • 参数 : elevation {int} 立体值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置立体值
mButton.setElevation(10);

getX()

获取x值 获取相对于父控件的x值

  • 返回 : {float} x值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获取x值
let x = mButton.getX();

setX(x)

设置x值 设置在父控件中x的值

  • 参数 : x {float} x值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置x值
mButton.setX(10);

getY()

获取y值 获取相对于父控件的x值

  • 返回 : {float} y值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获取y值
let y = mButton.getY();

setY(y)

设置y值 设置在父控件中y的值

  • 参数 : y {float} y值

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//设置y值
mButton.setY(10);

getW()

获得控件宽度

  • 返回 : {float} 宽度

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获得控件宽度
mButton.getW();

getH()

获得控件高度

  • 返回 : {float} 高度

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//获得控件高度
mButton.getW();

onTouch(callback)

获得控件高度

  • 参数 : callback {(motionEvent,view)=>{return false;}} 触摸回调

//解析布局,获得ui对象
let ui = $ui.layout("./myUi.xml");
//拿到控件
let mButton = ui.id("mButton");
//处理触摸事件
mButton.onTouch((event,view)=>{
    //处理触摸事件
    return true;
});