ui

1.在写UI界面时,必须把"ui";放在代码第一行,在它前面不能有其他代码,就算有,它前面的代码也必须是注释的 "ui"; 2.Auto.js的UI界面是用xml来编写界面的,并通过ui.layout()函数指定界面的布局xml。通俗的来讲就是写UI界面时必须把所有的控件和布局全部放在下面的...内。 ``` "ui"; ui.layout( ... ) ``` 3.控件的表示方法通常以<...开始,以 />结束 控件一般只需要一行,格式为: <控件名 属性1 属性2 /> {/* 例如文本控件text */} <text id="t1" textColor="black" text="文本控件" /> 中间是用来放属性的,不同的属性之间用空格隔开,当然,也可以不指定任何属性。 4.布局的表示方法通常以<...>开始,以</…>结束 布局一般需要多行,格式为: <布局名 属性1 属性2> </布局名> ``` // 例如垂直布局 <vertical gravity="center"> <button id="b1" checked="true" /> <text id="t1" textColor="black" text="文本控" /> </vertical> ``` 中间的省略号是用来放各种控件的,每个控件占一行。 布局的属性是放在第一个布局名的后面,不同的属性之间用空格隔开。当然,也可以不指定任何属性。 5.子控件/父布局的相关概念 ``` "ui"; ui.layout( <horizontal> <text id="t1" text="" /> <button id="b1" /> </horizontal> ) ``` 如上所示,表示文本控件和按钮控件是水平布局,就这个来说,文本控件和按钮控件都是水平布局的子控件,而水平布局则是文本控件和按钮控件的父布局。 6.控件和布局的所有属性格式皆为:属性="可设置的值" #### ###### 01 ### 控件和布局共有属性及可设置值 w 即宽度 ,可以设置的值为*, auto和具体数值 默认一般为auto *表示宽度尽量填满父布局 auto表示自适应宽度,根据View的内容自动调整 h 即高度,可以设置的值为*, auto和具体数值 默认一般为auto,同上 id 一个界面的id在同一个界面下通常是唯一的 gravity 决定View的内容相对于View的位置 可以设置的值为: left 靠左 right 靠右 top 靠顶部 bottom 靠底部 center 居中 center_vertical 垂直居中 center_horizontal 水平居中 layout_gravity 决定View本身在他的父布局的位置 可设置的值同上 margin 决定View和其他View的间距,即外边距 可以设置的值为 marginLeft 左外边距 marginRight 右外边距 marginTop 上外边距 marginBottom 下外边距 格式有: margin=“marginAll” 指定各个外边距都是该值 margin=“marginLeft marginTop marginRight marginBottom” 分别指定各个外边距 margin=“marginHorizontal marginVertical” 指定水平外边距和垂直外边距 padding 决定View和他的自身内容的间距,即内边距 可以设置的值为 paddingLeft 左外边距 paddingRight 右外边距 paddingTop 上外边距 paddingBottom 下外边距 格式有: padding=“paddingAll” 指定各个内边距都是该值 padding=“paddingLeft paddingTop paddingRight paddingBottom” 分别指定各个内边距 padding=“paddingHorizontal paddingVertical” 指定水平内边距和垂直内边距。 bg View的背景。其值可以是一个链接或路径指向的图片,或者RGB格式的颜色 bg="#00ff00" bg="file:///sdcard/1.png" bg="?attr/selectableItemBackground" clickable="true" 设置背景为点击时出现波纹效果 alpha View的透明度,其值是一个0~1之间的小数,0表示完全透明,1表示完全不透明 visbility View的可见性,该属性可以决定View是否显示出来。 其值可以为: gone 不可见。 visible 可见。默认情况下View都是可见的。 invisible 不可见,但仍然占用位置。 rotation View的旋转角度。通过该属性可以让这个View顺时针旋转一定的角度 默认的旋转中心为View的中心。 transformPivotX View的变换中心坐标x。用于View的旋转、放缩等变换的中心坐标。该坐标的坐标系以View的左上角为原点 transformPivotY View的变换中心坐标y。用于View的旋转、放缩等变换的中心坐标。该坐标的坐标系以View的左上角为原点 style 设置View的样式。不同控件有不同的可选的内置样式。 #### ###### 02 ### 控件及其基本应用 文本控件:text <text /> 属性: 1.text 设置文本的内容。 2.textColor 设置字体的颜色,可以是 RGB格式的颜色(例如#ff00ff) 颜色名称(例如red, green等) 3.textSize 设置字体的大小 4.textStyle 设置字体的样式,可选的值为: bold 加粗字体 italic 斜体 normal 正常字体。 可以用或("|")把他们组合起来 比如粗斜体为"bold|italic" 5.lines 设置文本控件的行数。即使文本内容没有达到设置的行数,控件也会留出相应的宽度来显示空白行;如果文本内容超出了设置的行数,则超出的部分不会显示。在xml中是不能设置多行文本的,要在代码中设置 "ui"; ui.layout( <vertical> <text>id="myText" lines="3"</text> </vertical> ); //通过\n换行 ; ui.myText.setText("第一行\n第二行\n第三行\n第四行") 6.typeface 设置字体。可选的值为: normal 正常字体 sans 衬线字体 serif 非衬线字体 monospace 等宽字体 7.autoLink 控制是否自动找到url和电子邮件地址等链接,并转换为可点击的链接。默认值为“none”。可选的值为以下的值以其通过或("|")的组合: all 匹配所有连接、邮件、地址、电话 email 匹配电子邮件地址 map 匹配地图地址 none 不匹配 (默认) phone 匹配电话号码 web 匹配URL地址 函数: ui.id.setText() 设置对应id的文本属性 ui.id.getText() 获取对应id的文本属性 按钮控件: button <button /> 属性: 1.所有文本控件的函数和属性都适用于按钮控件 2.按钮控件有一些内置的样式,通过style属性设置,可选的值如下 Widget.AppCompat.Button.Colored 带颜色的按钮 Widget.AppCompat.Button.Borderless 无边框按钮 Widget.AppCompat.Button.Borderless.Colored 带颜色的无边框按钮 函数: ui.id.setText() 设置对应id的文本属性 ui.id.getText() 获取对应id的文本属性 ui.id.click(function(){...}) 按钮点击响应事件(法1) ui.id1.on("click",()=> {...}) 按钮点击响应事件(法2) 输入框控件: input ``` <input /> ``` 属性: 1.所有文本控件的函数和属性都适用于按钮控件 2.输入框控件另外一些主要属性如下 3.hint 输入提示。这个提示会在输入框为空的时候显示出来。 4.textColorHint 指定输入提示的字体颜色。 5.textSizeHint 指定输入提示的字体大小。 6.inputType 指定输入框可以输入的文本类型。主要的可选的值如下: date 用于输入日期。 datetime 用于输入日期和时间。 textPassword 用于输入密码。 phone 用于输入一个电话号码。 time 用于输入时间。 8.password 指定输入框输入框是否为密码输入框。默认为false。 9.numeric 指定输入框输入框是否为数字输入框。默认为false。 函数: ui.id.setText() 设置对应id的文本属性 ui.id.getText() 获取对应id的文本属性 图片控件: img ``` <img /> ``` 1.图片控件用于显示来自网络、本地或者内嵌数据的图片,并可以指定图片以圆角矩形、圆形等显示,其属性如下: 2.src 使用一个Uri指定图片的来源。可以是 图片的地址(http://…) 本地路径(file://…) base64数据(“data:image/png;base64,…”)。 例如:src="file:///sdcard/1.png" src="https://riyugo.com/i/2021/01/20/mfdt44.png" 3.borderColor 图片控件的边框颜色。 4.radius 图片控件的半径。 5.radiusTopLeft 图片控件的左上角圆角的半径。 6.radiusTopRight 图片控件的右上角圆角的半径。 7.radiusBottomLeft 图片控件的左下角圆角的半径。 8.radiusBottomRight 图片控件的右下角圆角的半径。 9.borderWidth 图片控件的边框宽度。 10.borderColor 图片控件的边框颜色。 11.circle 指定该图片控件的图片是否剪切为圆形显示。可选的值为布尔值 选择框控件: checkbox ``` <checkbox /> ``` 属性: 1.所有文本控件的函数和属性都适用于选择框控件 2.checked 返回值为布尔值 函数: ui.id.on("check", (checked)=>{...}); ui.id.isChecked() 返回控件是否选中。返回值为值为true或false ui.id.setChecked(value) 设置控件选中。value的值为true或false 单选框控件: radio ``` <radio /> ``` 单选框布局: radiogroup 属性: 1.所有文本控件的函数和属性都适用于选择框控件 2.checked 返回值为布尔值 函数: ui.id.on("check", (checked)=>{...}); ui.id.isChecked() 返回控件是否选中。返回值为值为true或false ui.id.setChecked(value) 设置控件选中。value的值为true或false 开关控件:Switch ``` <Switch /> ``` 属性:checked 返回值为布尔值 <Switch id="autoService" text="无障碍服务" checked="{{auto.service != null}}" /> ui.autoService.on("check", function (checked) { if (checked && auto.service == null) { app.startActivity({ action: "android.settings.ACCESSIBILITY_SETTINGS" }); } if (!checked && auto.service != null) { auto.service.disableSelf(); } }) // 当用户回到本界面时,resume事件会被触发 ui.emitter.on("resume", function () { // 此时根据无障碍服务的开启情况,同步开关的状态 ui.autoService.checked = auto.service != null; }); 下拉菜单控件:spinner <spinner /> 属性: entries 选择项名字及项数 例entries="选项1|选项2|选项3" spinnerMode 下拉菜单模式 dialog为对话框式 函数: ui.id.setSelection(index)) 设置选中项(0为第一项) ui.id.getSelectedItemPosition() 获取选中项(0为第一项) 时间选择控件: timepicker <timepicker /> 属性:timePickerMode 选择模式 可选的为默认的时钟样式和spinner 日期选择控件: datepicker <datepicker /> 属性:datePickerMode 选择模式 可选的为默认的日期样式和spinner 标题栏控件: toolbar <toolbar /> 属性:title 标题栏名字 注意点:一般放在顶端栏布局(<appbar>...</appbar>)里 标签栏控件:tabs <tabs /> 注意点:一般放在顶端栏布局(<appbar>...</appbar>)里 ###### 03 #### 控件布局 垂直布局: vertical <vertical></vertical> 水平布局: horizontal <horizontal></horizontal> 卡片布局: card <card></card> 滑动布局:viewpager <viewpager /> 注意项:中间多少个布局就有多少页 函数:ui.id.setTitles(["标题1", "标题2", "标题3"]) 设置滑动页面的标题 使联动: ui.tabs.setupWithViewPager(ui.viewpager) 让滑动控件和标签栏控件联动 抽屉布局: drawer <drawer></drawer> 注意项:中间两个布局,且一个布局的属性layout_gravity="left",如下所示 <drawer> <vertical layout_gravity="left" bg="#00ff00" > </vertical> <vertical> </vertical> </drawer> 使联动: ui.toolbar.setupWithDrawer(ui.drawer) 让工具栏控件和抽屉联动 帧布局:frame <frame></frame> 帧布局为每个加入其中的控件创建一个空白的区域,每个子控件都在那一块区域。也就是说,帧布局会把控件一个个叠加在一起。先定义的控件在最底层,最后定义的控件在最上面。 顶端栏布局:appbar <appbar></appbar> ###### 04 ### 其他代码及注意点 注意点 整个UI编写过程中,有一个非常重要的原则:UI线程中除函数和公用变量外不要写任何流程性质的代码,如果要写流程,必须使用线程 threads.start(function() { 任务() }); 否则就会报以下的错误: 其他代码1 //创建选项菜单(右上角) ui.emitter.on("create_options_menu", menu=>{ menu.add("设置"); menu.add("关于"); }); //监听选项菜单点击 ui.emitter.on("options_item_selected", (e, item)=>{ switch(item.getTitle()){ case "设置": toast("还没有设置"); break; case "关于": alert("关于", "道无涯i"); break; } e.consumed = true; }); activity.setSupportActionBar(ui.toolbar); 其他代码2 ui.statusBarColor("#AA0000"); 设置状态栏的颜色