tower120 / cpp2android

Android native UI with c++! (like Xamarin but for c++)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Write native Android UI directly in c++!

Why to pass complex data structures between java and c side? Access android widgets directly from c++!

Motivation example

Filling layout from c++:

    void onCreate(const jni_interface::SharedPtr<AndroidViews::ViewGroup>& root){
        auto btnAdd = Button::make("Add more buttons");
        root->addView(*btnAdd);
      
        btnAdd->setOnClickListener([root](const SharedPtr<View>& view) {
            auto button = Button::make("Hello!");
            root->addView(*button);
            button->setOnClickListener([i=0](const SharedPtr<View>& view) mutable {
                Button* btn = static_cast<Button*>(view.get());
                btn->setText(std::to_string(++i).c_str());
            });          
        });
    }

You can easily mix java side logic with c++:

        SignalReceiver hideAd = SignalReceiver.make("hideAd");
        hideAd.listen(new SignalReceiver.Listener() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), "Hiding Ad.", Toast.LENGTH_LONG).show();
            }
        });
SignalSender<> hideAd("hideAd");
hideAd.send();

And vice-versa:

    SignalSenderO signalSender = new SignalSenderO("btnClick");

    public void btnClick(View view) {
        signalSender.send(view);
    }
SignalReceiver<jobject>& signal = SignalReceiver<jobject>::link("btnClick");
signal.set_unique_listener([](jobject obj){
    SharedPtr<Button> btn = adopt_object<Button>(obj);
    btn->setText("Clicked");
});

Target Android devices >=4.0

Documentation at /cpp2android/docs

Your cpp source code in /cpp . cpp Entry point in main.h

About

Android native UI with c++! (like Xamarin but for c++)

License:MIT License


Languages

Language:C++ 73.9%Language:Java 19.2%Language:CMake 7.0%