原生交互
界面框架开放了原生交互能力,但你必须先了解原生组件。
与原生组件交互
例如:button
的原生组件是MaterialButton
,我们可以通过getView
方法获得原生组件。
<button id="mBut" text="按钮"/>
//先找到button对象
let mBut = ui.id("mBut");
//获得原生组件对象
let materialButton = mBut.getView();//MaterialButton
//接下来就可以和原生组件MaterialButton进行交互操作了
//例如:设置文字
ui.run(() => {
materialButton.setText("我是文字");
});
与原生组件交互的时候,一定要使用ui.run(()=>{})
方法,保证操作在ui线程中执行。 但是我们的button组件本身就封装好了,可以在任意子线程中进行操作。
与activity交互
activity对象是AppCompatActivity
类型的实例,但是必须要等到ui.show()
之后,界面被完全加载显示之后,activity对象才能正常被拿到。 因此,ui.activity()
方法被设计成了阻塞方法,一旦你调用了ui.show()
方法之后然后在调用ui.activity()
方法就会进入阻塞,一直等待activity对象被拿到。
不过,如果你没有调用ui.show()
方法,ui.activity()
方法就不会阻塞,而是直接返回null。
let ui = $ui.layout("/sdcard/Pictures/ui.xml");
ui.show();
//拿到activity对象
let activity = ui.activity();
//接下来就可以和activity对象交互了,例如:获得context对象
let context = activity.getApplicationContext();