如何使用本机代码更改 Titanium 操作栏中的 home/back 按钮图标?

How do I change the home/back button icon in the actionbar in Titanium using native code?

我想更改 Titanium 中的 back/home 按钮图标。我可以使用主题来做到这一点。

但是我想在应用主题后在运行时更改图标。钛的操作栏没有任何 属性 或更改图标的方法。 Documentation。所以我正在使用超级循环(本机代码)来更改图标,但不幸的是我无法访问操作栏。

这是我的看法

<Alloy>
    <Window class="container">
        <ActionBar id="actionbar" displayHomeAsUp="true" homeButtonEnabled="true"></ActionBar>
        <Label id="label" onClick="doClick">Hello, World</Label>
    </Window>
</Alloy>

我的代码

import AppCompatActivity from 'android.support.v7.app.AppCompatActivity';
const activity = new AppCompatActivity(Ti.Android.currentActivity);
activity.getActionBar().setHomeAsUpIndicator(Titanium.Android.R.drawable.notificacion);

错误

[ERROR] TiExceptionHandler: (main) [1,434] /alloy/controllers/index.js:69
[ERROR] TiExceptionHandler:   activity.getActionBar().setHomeAsUpIndicator(Titanium.Android.R.drawable.notificacionmas);
[ERROR] TiExceptionHandler:                           ^
[ERROR] TiExceptionHandler: TypeError: activity.getActionBar(...).setHomeAsUpIndicator is not a function
[ERROR] TiExceptionHandler:     at new Controller (/alloy/controllers/index.js:69:27)
[ERROR] TiExceptionHandler:     at Object.exports.createController (/alloy.js:428:10)
[ERROR] TiExceptionHandler:     at /app.js:22:7
[ERROR] TiExceptionHandler:     at Module._runScript (ti:/module.js:608:9)
[ERROR] TiExceptionHandler:     at Module.load (ti:/module.js:107:7)
[ERROR] TiExceptionHandler:     at Module.loadJavascriptText (ti:/module.js:453:9)
[ERROR] TiExceptionHandler:     at Module.loadAsFile (ti:/module.js:508:15)
[ERROR] TiExceptionHandler:     at Module.loadAsFileOrDirectory (ti:/module.js:425:20)
[ERROR] TiExceptionHandler:     at Module.require (ti:/module.js:255:17)
[ERROR] TiExceptionHandler:     at Module.global.Module.require (/ti.main.js:11435:34)
[ERROR] TiExceptionHandler:
[ERROR] TiExceptionHandler:     org.appcelerator.kroll.runtime.v8.V8Runtime.nativeRunModule(Native Method)
[ERROR] TiExceptionHandler:     org.appcelerator.kroll.runtime.v8.V8Runtime.doRunModule(V8Runtime.java:162)
[ERROR] TiExceptionHandler:     org.appcelerator.kroll.KrollRuntime.runModule(KrollRuntime.java:207)
[ERROR] TiExceptionHandler:     org.appcelerator.titanium.TiLaunchActivity.loadScript(TiLaunchActivity.java:99)
[ERROR] TiExceptionHandler:     org.appcelerator.titanium.TiRootActivity.loadScript(TiRootActivity.java:480)
[ERROR] TiExceptionHandler:     org.appcelerator.titanium.TiLaunchActivity.onResume(TiLaunchActivity.java:183)
[ERROR] TiExceptionHandler:     org.appcelerator.titanium.TiRootActivity.onResume(TiRootActivity.java:499)
[ERROR] TiExceptionHandler:     android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1446)
[ERROR] TiExceptionHandler:     android.app.Activity.performResume(Activity.java:7939)
[ERROR] TiExceptionHandler:     android.app.ActivityThread.performResumeActivity(ActivityThread.java:4195)
[ERROR] V8Exception: Exception occurred at /alloy/controllers/index.js:69: Uncaught TypeError: activity.getActionBar(...).setHomeAsUpIndicator is not a function

备注

我相信这个问题不是重复的,因为它与 Titanium 有关,而不是原生 Android。

绝对不需要 Hyperloop。

您可以使用 activity https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Android.Activity

与 actionBar 通信

然后你可以从activity中获取actionBar,然后使用actionBar[=17]的icon属性更改图标=]

确保仅在 window 触发了 open 事件后才执行此操作。

window.addEvenListener('open', e => {
  var actionbar = window.activity.actionBar;
  actionbar.icon = '/images/upicon.png'; 
});

我已经在 https://github.com/m1ga/hyperloop.collapsingToolbarLayout

更新了我的 Hyperloop 示例

它在 "collapsing toolbar" 示例屏幕中使用自定义后退图标。 我添加了一个图标 xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FFFFFF00"
        android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zm-8,0c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5C6.34,5 5,6.34 5,8s1.34,3 3,3zm0,2c-2.33,0 -7,1.17 -7,3.5V19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zm8,0c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45V19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z"/>
</vector>

并用

分配它
toolbar.setNavigationIcon(resIDFromString("ic_action_users", "drawable"));

(https://github.com/m1ga/hyperloop.collapsingToolbarLayout/blob/master/app/controllers/second.js#L44)

完整示例在 repo 中