diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/android/CollapseToolbarProxy.java b/android/modules/ui/src/java/ti/modules/titanium/ui/android/CollapseToolbarProxy.java
index 0855777e2ff..32bf6a350a3 100644
--- a/android/modules/ui/src/java/ti/modules/titanium/ui/android/CollapseToolbarProxy.java
+++ b/android/modules/ui/src/java/ti/modules/titanium/ui/android/CollapseToolbarProxy.java
@@ -8,10 +8,10 @@
import android.app.Activity;
+import org.appcelerator.kroll.KrollDict;
import org.appcelerator.kroll.KrollFunction;
import org.appcelerator.kroll.annotations.Kroll;
import org.appcelerator.titanium.TiApplication;
-import org.appcelerator.titanium.TiC;
import org.appcelerator.titanium.proxy.TiViewProxy;
import org.appcelerator.titanium.util.TiConvert;
import org.appcelerator.titanium.view.TiDrawableReference;
@@ -49,8 +49,8 @@ public void setTitle(String text)
@Kroll.setProperty
public void setContentView(Object obj)
{
- if (obj instanceof TiViewProxy) {
- setPropertyAndFire(TiC.PROPERTY_CONTENT_VIEW, (TiViewProxy) obj);
+ if (obj instanceof TiViewProxy && collapseToolbar != null) {
+ collapseToolbar.setContentView((TiViewProxy) obj);
}
}
@@ -101,4 +101,22 @@ public void setNavigationIconColor(String value)
{
collapseToolbar.setNavigationIconColor(TiConvert.toColor(value, TiApplication.getAppCurrentActivity()));
}
+
+ @Kroll.method
+ public void addMenuItem(KrollDict options)
+ {
+ collapseToolbar.addMenuItem(options);
+ }
+
+ @Kroll.method
+ public void removeMenuItem(int itemId)
+ {
+ collapseToolbar.removeMenuItem(itemId);
+ }
+
+ @Kroll.method
+ public void clearMenu()
+ {
+ collapseToolbar.clearMenu();
+ }
}
diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUICollapseToolbar.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUICollapseToolbar.java
index d422c829803..68d97fd18b5 100644
--- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUICollapseToolbar.java
+++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUICollapseToolbar.java
@@ -9,6 +9,8 @@
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
@@ -49,6 +51,7 @@ public class TiUICollapseToolbar extends TiUIView
ImageView imageView = null;
MaterialToolbar toolbar = null;
KrollFunction homeIconFunction = null;
+ KrollFunction menuItemClickFunction = null;
boolean homeAsUp = false;
TiViewProxy localContentView = null;
@@ -94,6 +97,15 @@ public TiUICollapseToolbar(TiViewProxy proxy)
setContentView(localContentView);
}
+ toolbar.setOnMenuItemClickListener(item -> {
+ if (proxy.hasListeners(TiC.EVENT_CLICK)) {
+ KrollDict event = new KrollDict();
+ event.put("itemId", item.getItemId());
+ fireEvent(TiC.EVENT_CLICK, event);
+ }
+ return true;
+ });
+
setNativeView(layout);
} catch (Exception e) {
Log.e(TAG, "Layout error: " + e.getMessage());
@@ -257,4 +269,38 @@ public void processProperties(KrollDict d)
setNavigationIconColor(TiConvert.toColor(d.getString(TiC.PROPERTY_NAVIGATION_ICON_COLOR), activity));
}
}
+
+ public void addMenuItem(KrollDict options)
+ {
+ if (toolbar != null && options.containsKeyAndNotNull(TiC.PROPERTY_TITLE)) {
+ Menu menu = toolbar.getMenu();
+ int itemId = menu.size();
+ if (options.containsKeyAndNotNull(TiC.PROPERTY_ITEM_ID)) {
+ itemId = options.getInt(TiC.PROPERTY_ITEM_ID);
+ }
+ MenuItem item = menu.add(Menu.NONE, itemId, Menu.NONE, options.getString(TiC.PROPERTY_TITLE));
+ if (options.containsKeyAndNotNull(TiC.PROPERTY_SHOW_AS_ACTION)) {
+ item.setShowAsAction(options.getInt(TiC.PROPERTY_SHOW_AS_ACTION));
+ }
+ }
+ }
+
+ public void removeMenuItem(int itemId)
+ {
+ if (toolbar != null) {
+ Menu menu = toolbar.getMenu();
+ MenuItem item = menu.findItem(itemId);
+ if (item != null) {
+ menu.removeItem(itemId);
+ }
+ }
+ }
+
+ public void clearMenu()
+ {
+ if (toolbar != null) {
+ Menu menu = toolbar.getMenu();
+ menu.clear();
+ }
+ }
}
diff --git a/apidoc/Titanium/UI/Android/CollapseToolbar.yml b/apidoc/Titanium/UI/Android/CollapseToolbar.yml
index ae3880070de..8e4869cd228 100644
--- a/apidoc/Titanium/UI/Android/CollapseToolbar.yml
+++ b/apidoc/Titanium/UI/Android/CollapseToolbar.yml
@@ -78,6 +78,42 @@ properties:
type: Callback
permission: write-only
+methods:
+ - name: addMenuItem
+ summary: Adds a menu item from the passed creation options.
+ since: "12.7.0"
+ parameters:
+ - name: options
+ summary: |
+ Creation options. Supported options are
+ [itemId](Titanium.Android.MenuItem.itemId),
+ [title](Titanium.Android.MenuItem.title) and
+ [showAsAction](Titanium.Android.MenuItem.showAsAction).
+ type: Object
+
+ - name: clearMenu
+ summary: Removes all menu items
+ since: "12.7.0"
+
+ - name: removeMenuItem
+ summary: Removes the menu item with the provided `itemId`.
+ since: "12.7.0"
+ parameters:
+ - name: itemId
+ summary: |
+ The itemId of the menu item
+ type: Number
+
+events:
+ - name: click
+ summary: Fired when the user clicks a menu item.
+ since: "12.7.0"
+ properties:
+ - name: itemId
+ summary: |
+ itemId of the clicked menu item
+ type: Number
+
examples:
- title: Simple setup
example: |
@@ -85,36 +121,35 @@ examples:
``` js
const win = Ti.UI.createWindow({
- theme: "Theme.Titanium.DayNight.NoTitleBar"
+ theme: "Theme.Titanium.DayNight.NoTitleBar"
});
const centerView = Ti.UI.createView({
- layout: "vertical",
- height: Ti.UI.SIZE
+ layout: "vertical",
+ height: Ti.UI.SIZE
});
for (let i = 0; i < 40; ++i) {
- let lbl = Ti.UI.createLabel({
- text: "test " + i,
- height: 40
- });
- centerView.add(lbl);
+ let lbl = Ti.UI.createLabel({
+ text: "test " + i,
+ height: 40
+ });
+ centerView.add(lbl);
}
const collapsingToolbar = Ti.UI.Android.createCollapseToolbar({
- contentScrimColor: "#333",
- top: 0,
- image: "default.png",
- title: "Collapsing toolbar"
+ contentScrimColor: "#333",
+ top: 0,
+ image: "default.png",
+ title: "Collapsing toolbar",
+ contentView: centerView
});
-
win.addEventListener('open', function() {
- collapsingToolbar.contentView = centerView;
- collapsingToolbar.onHomeIconItemSelected = function() {
- alert("click click");
- };
- collapsingToolbar.displayHomeAsUp = true;
+ collapsingToolbar.onHomeIconItemSelected = function() {
+ alert("click click");
+ };
+ collapsingToolbar.displayHomeAsUp = true;
});
win.add(collapsingToolbar);
@@ -122,19 +157,43 @@ examples:
```
- title: Alloy example
example: |
- ``` js
+ ``` xml
-
+
+
+
+
+
+
+
+
+
+
+ ```
+ - title: Menu example
+ example: |
+ ``` js
+ const win = Ti.UI.createWindow({
+ theme: "Theme.Titanium.DayNight.NoTitleBar"
+ });
-
+ const collapsingToolbar = Ti.UI.Android.createCollapseToolbar({
+ contentScrimColor: "#333",
+ top: 0,
+ title: "Collapsing toolbar",
+ });
-
-
-
-
-
-
-
-
+ win.addEventListener('open', function() {
+ collapsingToolbar.addEventListener("click", function(e) {
+ alert(e.itemId + " clicked");
+ });
+ collapsingToolbar.addMenuItem({
+ title: "Menu item",
+ showAsAction: Ti.Android.SHOW_AS_ACTION_NEVER
+ });
+ });
+
+ win.add(collapsingToolbar);
+ win.open();
```