众所周知,安卓应用开发经过这么多年的发展相对成熟和稳定,鸿蒙 OS 作为后来者兼容一个成熟的开发体系会节省很多推广和开发成本。但在实际开发中,代码层面仍然有很多细节上的差异,会给初次开发人员造成困扰。
本宝典旨在汇总实际开发中第三方件接入时的代码差异,以期帮助开发人员更好的进行开发作业,由于目前接触的开发类型有限,所汇总的内容多少会有疏漏,后期我们会进一步完善和补全。
01
消息&多线程
①设置线程级别
安卓:android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_XXXXX);
鸿蒙:ProcessManager.setThreadPriority(Thread.xxx);
②判断是否是主线程
安卓:Looper.getMainLooper().getThread() == Thread.currentThread()
鸿蒙:EventRunner.getMainEventRunner().isCurrentRunnerThread();
③取消任务操作
安卓:task.cancel(true);
鸿蒙:task.revoke();
02
布局&组件
①展示一段时间的提示信息弹框
安卓:Toast makeText(Context context,String msg,int duration).show();
鸿蒙:new ToastDialog(Context context).setText(String msg).show();
②给控件设置它的左中右上的图片
安卓:
代码中:
Drawable dwLeft = getResources().getDrawable(R.mipmap.ic_launcher);
dwLeft.setBounds(0, 0, dwLeft.getMinimumWidth(), dwLeft.getMinimumHeight());
View.setCompoundDrawables(dwLeft, null, null, null);
布局中:
android:drawableLeft=“@mipmap/ic_launcher”
android:drawableTop=“@mipmap/ic_launcher”
android:drawableRight=“@mipmap/ic_launcher”
android:drawableBottom=“@mipmap/ic_launcher”
鸿蒙:
代码中:Resource resource = context.getResourceManager().getResource(ResourceTable.Media_select);
PixelMapElement element = new PixelMapElement(resource);
companent.setAroundElements(element,null,null,null);
布局中:ohos:element_left=“media:icon"ohos:elementright="media:icon"ohos:elementright="media:icon”
ohos:element_top=“media:icon"ohos:elementbottom="media:icon"ohos:elementbottom="media:icon”
③设置控件的多态化
安卓:
在布局中给控件设置:
android:background=“@drawable/bt_login”
在 xml 中实现 bt_login:
item>
item>
selector>
鸿蒙:Resource selectResource = context.getResourceManager().getResource(ResourceTable.Media_select);
Resource emptyResource = context.getResourceManager().getResource(ResourceTable.Media_unselect);
PixelMapElement selectElement = new PixelMapElement(selectResource);
PixelMapElement emptyElement = new PixelMapElement(emptyResource);
StateElement checkElement = new StateElement();
checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_SELECTED}, selectElement);
checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, emptyElement);
component.setButtonElement(null);
component.setAroundElements(checkElement,null,null,null);
component.setSelected(true);
④scrollView 滚动
安卓:
android:layout_width=“match_parent”
android:layout_height=“match_parent”>
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”>
LinearLayout>
ScrollView>
鸿蒙:
ohos:height=“match_content”
ohos:width=“match_parent”
>
ohos:height=“match_content”
ohos:width=“match_content”
ohos:orientation=“vertical”>
DirectionalLayout>
ScrollView>
⑤组件隐藏
安卓:
不可见:
android:visibility=“invisible”;
Java 代码:
view.setVisibility(View.INVISIBLE);
隐藏:
android:visibility=“gone”;
Java代码:
view.setVisibility(View.GONE);
鸿蒙:ohos:visibility=“hide”;comp.setVisibility(HIDE);ohos:visibility=“invisible”;comp.setVisibility(INVISIBLE)
⑥线性布局
安卓:LinearLayout
鸿蒙:DirectionalLayout
⑦相对布局
安卓:RelativeLayout
鸿蒙:DependentLayout
⑧帧布局
安卓:FrameLayout
鸿蒙:StackLayout
⑨选项卡
安卓:TabLayout
鸿蒙:TabList 和 Tab
⑩像素单位
安卓:dp
鸿蒙:vp
⑪控件的对齐方式
安卓:Gravity.CENTER
鸿蒙:LayoutAlignment.CENTER
⑫布局名称及用法
安卓:RelativeLayout相对布局
LinearLayout线性布局
鸿蒙:DependentLayout相对布局
DirectionalLayout线性布局
⑬自定义布局
安卓:View inflate =
inflate(getContext(), R.layout.reg_view, this);
鸿蒙:component = LayoutScatter.getInstance(context).parse(com.istone.videocache.ResourceTable.Layout_ability_player,layout,false);
layout.addComponent(component, 0);
⑭叠加布局,层级叠加
安卓:FrameLayout
鸿蒙:StackLayout