繁体   English   中英

如何将 Android Studio 项目转换为 Appcelerator Titanium 模块

[英]How to convert an Android Studio project to an Appcelerator Titanium Module

嗨,伙计们,所以,我有这个教程。 它提出了一些问题。

Titanium-AndroidStudio

简而言之,它展示了如何在 Android Studio 上打开 Appcelerator 库并使用它来开发模块。

我需要的是另一种方式。

我有一个 AndroidStudio 项目,我需要将其“转换”为 Appcelerator Titanium 模块。 Java 代码没有问题,因为 Java 是 Java。 但是有很多事情需要考虑。 The Android Studio uses it's own screen/buttons/views implementation, and the Appcelerator Module is pure java made in Eclipse, and the screen, views, buttons, etc, are created using Javascript inside the Titanium framework.

我将举一个例子。

这是来自 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 代码相关,例如相机视图和按钮。

如何从此片段中删除“可视”代码,并将其与 Appcelerator Javascript 代码相关联。

例如,这个按钮必须在 appcelerator 中构建,如下所示:

var VBtn = Ti.UI.createButton({
    title: 'CameraButton',
    bottom: 50,
});

我不知道我是否清楚这一点,但我希望你能理解我。

基本上,如何将项目从 Android Studio 迁移到 Appcelerator 模块并在 Titanium 内部使用它。

提前致谢。

更新:

这就是我到目前为止所拥有的。

ViewProxy 和 View 类。

@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 ,了解如何启动和运行它。

另一部分也不对。 您可以在模块中使用本机 UI 元素(甚至在 Hyperloop 中):

这甚至会创建一个自定义视图,您可以稍后在 controller 中使用,如下所示<VonageView module="ti.vonage" id="vonage"/>

请记住:与其他框架不同,Titanium 使用原生 UI 元素,并且只有 JS 用于 UI 和逻辑之间的连接/代码层。

keepScreenOn 已经在 SDK 内: http://docs.appcelerator.com/platform/latest/#./api/Titanium.UI.View-property-keepScreenOn

如果缺少像setStreamVolume这样的其他部分,您甚至可以将它们添加到 SDK(例如这里的TiSound )中,因为它是开源的,可能对其他人也有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM