如何将 Android Studio 项目转换为 Appcelerator Titanium 模块
How to convert an Android Studio project to an Appcelerator Titanium Module
大家好!
所以,我有这个教程,它提出了一些问题。
简而言之,它展示了如何在 Android Studio 上打开 Appcelerator 库并使用它来开发模块。
我需要的是相反的方式。
我有一个 AndroidStudio 项目,我需要将其 "convert" 到 Appcelerator Titanium 模块。 Java 代码不是问题,因为 Java 是 Java。但是有很多事情需要考虑。 Android Studio 使用它自己的 screen/buttons/views 实现,Appcelerator 模块是纯 java 在 Eclipse 中制作的,屏幕、视图、按钮等是使用 Java 创建的Titanium 框架内的脚本。
我来举个例子
这是来自 Android Studio 的片段。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestPermissions();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_tire_scan);
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
}
btnAccept = findViewById(R.id.btnAccept);
mOpenCvCameraView = findViewById(R.id.java_camera_View);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
所以,我们有一些 Java 代码来做一些事情,我们还有与 Java 代码相关的应用程序本身的行为,比如相机视图和按钮。
如何从此片段中删除 "visual" 代码,并将其与 Appcelerator Java 脚本代码相关联。
例如,这个按钮必须内置在 appcelerator 中,如下所示:
var VBtn = Ti.UI.createButton({
title: 'CameraButton',
bottom: 50,
});
我不知道我是否清楚这一点,但我希望你能理解我。
基本上,如何将项目从 Android Studio 迁移到 Appcelerator 模块并在 Titanium 内部使用它。
提前致谢。
更新:
这是我目前所拥有的。
ViewProxy 和视图 类。
@Kroll.proxy(creatableInModule = ItiremoduleModule.class)
public class ItireViewProxy extends TiViewProxy
{
public ItireViewProxy()
{
super();
}
PortraitCameraBridgeViewBase mOpenCvCameraView;
AppCompatActivity appCom;
protected class ItireView extends TiUIView
{
public ItireView(TiViewProxy proxy) {
super(proxy);
String packageName = proxy.getActivity().getPackageName();
Resources resources = proxy.getActivity().getResources();
View viewWrapper;
int java_camera_View = resources.getIdentifier("java_camera_View", "id", packageName);
LayoutInflater inflater = LayoutInflater.from(proxy.getActivity());
viewWrapper = inflater.inflate(java_camera_View, null);
setNativeView(viewWrapper);
}
}
@Override
public TiUIView createView(Activity activity) {
TiUIView view = new ItireView(this);
view.getLayoutParams().autoFillsHeight = true;
view.getLayoutParams().autoFillsWidth = true;
return view;
}
@Kroll.method
public void setView() {
// must use this method to set the view on Appcelerator, right?
}
}
xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:itiremodule="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:opencv="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itire.budini.ItireViewProxy">
<com.example.etech.opencvtest320.PortraitCameraView
android:id="@+id/java_camera_View"
android:layout_width="379dp"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:visibility="visible"
opencv:camera_id="any"
opencv:show_fps="true" />
<Button
android:id="@+id/btnAccept"
style="?android:attr/borderlessButtonStyle"
android:layout_width="375dp"
android:layout_height="76dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="32dp"
android:background="@android:color/darker_gray"
android:onClick="scanAgain"
android:text="Scanning iTread..."
android:textAllCaps="false"
android:textColor="#1F2025"
android:textSize="18sp"
android:visibility="visible" />
虽然这是一个很棒的教程,但有点过时了。从 Titanium 9.0.0 开始,可以更轻松地使用 Android Studio。看看:https://dev.to/miga/using-android-studio-to-develop-titanium-modules-2jc4 如何起床和 运行.
另一部分也不正确。您可以在模块中(甚至在 Hyperloop 中)使用原生 UI 元素:
- 这里我在 Hyperloop 中使用原生布局 XML:https://github.com/m1ga/hyperloop.collapsingToolbarLayout
- 在这个模块中,我使用了一个 XML 布局,我在模块中填充了它:the XML layout - The connection part
这甚至会创建一个自定义视图,您以后可以像这样在控制器中使用 <VonageView module="ti.vonage" id="vonage"/>
请记住:与其他框架不同,Titanium 使用本机 UI 元素,并且在 UI 和逻辑之间的 connection/code 层仅使用 JS。
keepScreenOn 已经在 SDK 中:
http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.View-property-keepScreenOn
如果缺少其他部分,例如 setStreamVolume
,您甚至可以将它们添加到 SDK 中(例如此处 TiSound),因为它是开源的,可能对其他人也有用。
大家好! 所以,我有这个教程,它提出了一些问题。
简而言之,它展示了如何在 Android Studio 上打开 Appcelerator 库并使用它来开发模块。
我需要的是相反的方式。
我有一个 AndroidStudio 项目,我需要将其 "convert" 到 Appcelerator Titanium 模块。 Java 代码不是问题,因为 Java 是 Java。但是有很多事情需要考虑。 Android Studio 使用它自己的 screen/buttons/views 实现,Appcelerator 模块是纯 java 在 Eclipse 中制作的,屏幕、视图、按钮等是使用 Java 创建的Titanium 框架内的脚本。
我来举个例子
这是来自 Android Studio 的片段。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestPermissions();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_tire_scan);
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
}
btnAccept = findViewById(R.id.btnAccept);
mOpenCvCameraView = findViewById(R.id.java_camera_View);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
}
所以,我们有一些 Java 代码来做一些事情,我们还有与 Java 代码相关的应用程序本身的行为,比如相机视图和按钮。
如何从此片段中删除 "visual" 代码,并将其与 Appcelerator Java 脚本代码相关联。
例如,这个按钮必须内置在 appcelerator 中,如下所示:
var VBtn = Ti.UI.createButton({
title: 'CameraButton',
bottom: 50,
});
我不知道我是否清楚这一点,但我希望你能理解我。
基本上,如何将项目从 Android Studio 迁移到 Appcelerator 模块并在 Titanium 内部使用它。
提前致谢。
更新:
这是我目前所拥有的。
ViewProxy 和视图 类。
@Kroll.proxy(creatableInModule = ItiremoduleModule.class)
public class ItireViewProxy extends TiViewProxy
{
public ItireViewProxy()
{
super();
}
PortraitCameraBridgeViewBase mOpenCvCameraView;
AppCompatActivity appCom;
protected class ItireView extends TiUIView
{
public ItireView(TiViewProxy proxy) {
super(proxy);
String packageName = proxy.getActivity().getPackageName();
Resources resources = proxy.getActivity().getResources();
View viewWrapper;
int java_camera_View = resources.getIdentifier("java_camera_View", "id", packageName);
LayoutInflater inflater = LayoutInflater.from(proxy.getActivity());
viewWrapper = inflater.inflate(java_camera_View, null);
setNativeView(viewWrapper);
}
}
@Override
public TiUIView createView(Activity activity) {
TiUIView view = new ItireView(this);
view.getLayoutParams().autoFillsHeight = true;
view.getLayoutParams().autoFillsWidth = true;
return view;
}
@Kroll.method
public void setView() {
// must use this method to set the view on Appcelerator, right?
}
}
xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:itiremodule="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:opencv="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itire.budini.ItireViewProxy">
<com.example.etech.opencvtest320.PortraitCameraView
android:id="@+id/java_camera_View"
android:layout_width="379dp"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:visibility="visible"
opencv:camera_id="any"
opencv:show_fps="true" />
<Button
android:id="@+id/btnAccept"
style="?android:attr/borderlessButtonStyle"
android:layout_width="375dp"
android:layout_height="76dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="32dp"
android:background="@android:color/darker_gray"
android:onClick="scanAgain"
android:text="Scanning iTread..."
android:textAllCaps="false"
android:textColor="#1F2025"
android:textSize="18sp"
android:visibility="visible" />
虽然这是一个很棒的教程,但有点过时了。从 Titanium 9.0.0 开始,可以更轻松地使用 Android Studio。看看:https://dev.to/miga/using-android-studio-to-develop-titanium-modules-2jc4 如何起床和 运行.
另一部分也不正确。您可以在模块中(甚至在 Hyperloop 中)使用原生 UI 元素:
- 这里我在 Hyperloop 中使用原生布局 XML:https://github.com/m1ga/hyperloop.collapsingToolbarLayout
- 在这个模块中,我使用了一个 XML 布局,我在模块中填充了它:the XML layout - The connection part
这甚至会创建一个自定义视图,您以后可以像这样在控制器中使用 <VonageView module="ti.vonage" id="vonage"/>
请记住:与其他框架不同,Titanium 使用本机 UI 元素,并且在 UI 和逻辑之间的 connection/code 层仅使用 JS。
keepScreenOn 已经在 SDK 中: http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.View-property-keepScreenOn
如果缺少其他部分,例如 setStreamVolume
,您甚至可以将它们添加到 SDK 中(例如此处 TiSound),因为它是开源的,可能对其他人也有用。