mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Fix - nav button with reflection
This commit is contained in:
@@ -18,3 +18,21 @@ export function buttonTap(args: observable.EventData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var j = 0;
|
||||||
|
export function visibilityTap(args: observable.EventData) {
|
||||||
|
var page = <pages.Page>view.getAncestor(<view.View>args.object, "Page")
|
||||||
|
|
||||||
|
if (j % 3 === 0) {
|
||||||
|
page.actionBar.androidIconVisibility = "always";
|
||||||
|
}
|
||||||
|
else if (j % 3 === 1) {
|
||||||
|
page.actionBar.androidIconVisibility = "never";
|
||||||
|
}
|
||||||
|
else if (j % 3 === 2) {
|
||||||
|
page.actionBar.androidIconVisibility = "auto";
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
console.log("Visibility changed to: " + page.actionBar.androidIconVisibility);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,5 +4,6 @@
|
|||||||
</Page.actionBar>
|
</Page.actionBar>
|
||||||
<StackLayout>
|
<StackLayout>
|
||||||
<Button text="button" tap="buttonTap"/>
|
<Button text="button" tap="buttonTap"/>
|
||||||
|
<Button text="change main icon visibility" tap="visibilityTap"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Page>
|
</Page>
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -29,7 +29,7 @@ export class ActionBar extends common.ActionBar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onAndroidItemSelected(itemId: number): boolean{
|
public _onAndroidItemSelected(itemId: number): boolean {
|
||||||
var menuItem = this.actionItems.getItemAt(itemId - ACTION_ITEM_ID_OFFSET);
|
var menuItem = this.actionItems.getItemAt(itemId - ACTION_ITEM_ID_OFFSET);
|
||||||
if (menuItem) {
|
if (menuItem) {
|
||||||
menuItem._raiseTap();
|
menuItem._raiseTap();
|
||||||
@@ -66,34 +66,12 @@ export class ActionBar extends common.ActionBar {
|
|||||||
if (navButton) {
|
if (navButton) {
|
||||||
// No API to set the icon in pre-lvl 18
|
// No API to set the icon in pre-lvl 18
|
||||||
if (API_LVL >= 18) {
|
if (API_LVL >= 18) {
|
||||||
try {
|
var drawableOrId = getDrawableOrResourceId(navButton.icon, this._appResources);
|
||||||
// TODO: Find a better way to set the icon instead of using reflection
|
if (!drawableOrId) {
|
||||||
var drawableOrId = getDrawableOrResourceId(navButton.icon, this._appResources);
|
drawableOrId = 0;
|
||||||
if (!drawableOrId) {
|
|
||||||
drawableOrId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
var arr, arr2, method;
|
|
||||||
if (types.isNumber(drawableOrId)) {
|
|
||||||
arr[0] = java.lang.Integer.TYPE;
|
|
||||||
method = actionBar.getClass().getMethod("setHomeAsUpIndicator", arr);
|
|
||||||
|
|
||||||
arr2 = java.lang.reflect.Array.newInstance(java.lang.Object.class, 1);
|
|
||||||
arr2[0] = new java.lang.Integer(drawableOrId);
|
|
||||||
method.invoke(actionBar, arr2);
|
|
||||||
} else {
|
|
||||||
arr = java.lang.reflect.Array.newInstance(java.lang.Class.class, 1);
|
|
||||||
arr[0] = android.graphics.drawable.Drawable.class;
|
|
||||||
method = actionBar.getClass().getMethod("setHomeAsUpIndicator", arr);
|
|
||||||
|
|
||||||
arr2 = java.lang.reflect.Array.newInstance(java.lang.Object.class, 1);
|
|
||||||
arr2[0] = drawableOrId;
|
|
||||||
method.invoke(actionBar, arr2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
trace.write("Failed to set navigation icon: " + e, trace.categories.Error, trace.messageType.error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setHomeAsUpIndicator(actionBar, drawableOrId);
|
||||||
}
|
}
|
||||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
}
|
}
|
||||||
@@ -163,7 +141,40 @@ export class ActionBar extends common.ActionBar {
|
|||||||
if (frame.topmost().currentPage === this.page) {
|
if (frame.topmost().currentPage === this.page) {
|
||||||
this._updateIcon(frame.topmost().android.actionBar);
|
this._updateIcon(frame.topmost().android.actionBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var setHomeAsUpIndicatorWithResoruceId: java.lang.reflect.Method;
|
||||||
|
var setHomeAsUpIndicatorWithDrawable: java.lang.reflect.Method;
|
||||||
|
function setHomeAsUpIndicator(actionBar: android.app.ActionBar, drawableOrId: any) {
|
||||||
|
try {
|
||||||
|
// TODO: Remove reflection as soon as AppCopmat libs are available
|
||||||
|
var paramsArr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 1);
|
||||||
|
if (types.isNumber(drawableOrId)) {
|
||||||
|
if (!setHomeAsUpIndicatorWithResoruceId) {
|
||||||
|
// get setHomeAsUpIndicator(resourceId: number) method with reflection and cache it
|
||||||
|
let typeArr = java.lang.reflect.Array.newInstance(java.lang.Class.class, 1);
|
||||||
|
typeArr[0] = java.lang.Integer.TYPE;
|
||||||
|
setHomeAsUpIndicatorWithResoruceId = actionBar.getClass().getMethod("setHomeAsUpIndicator", typeArr);
|
||||||
|
}
|
||||||
|
|
||||||
|
paramsArr[0] = new java.lang.Integer(drawableOrId);
|
||||||
|
setHomeAsUpIndicatorWithResoruceId.invoke(actionBar, paramsArr);
|
||||||
|
} else {
|
||||||
|
if (!setHomeAsUpIndicatorWithDrawable) {
|
||||||
|
// get setHomeAsUpIndicator(drawable) method with reflection and cache it
|
||||||
|
let typeArr = java.lang.reflect.Array.newInstance(java.lang.Class.class, 1);
|
||||||
|
typeArr[0] = android.graphics.drawable.Drawable.class;
|
||||||
|
setHomeAsUpIndicatorWithDrawable = actionBar.getClass().getMethod("setHomeAsUpIndicator", typeArr);
|
||||||
|
}
|
||||||
|
|
||||||
|
paramsArr[0] = drawableOrId;
|
||||||
|
setHomeAsUpIndicatorWithDrawable.invoke(actionBar, paramsArr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
trace.write("Failed to set navigation icon: " + e, trace.categories.Error, trace.messageType.error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDrawableOrResourceId(icon: string, resources: android.content.res.Resources): any {
|
function getDrawableOrResourceId(icon: string, resources: android.content.res.Resources): any {
|
||||||
|
|||||||
Reference in New Issue
Block a user