Custom context menu on inventory now works.

This commit is contained in:
Zukero
2017-11-09 16:39:30 +01:00
parent 3598624a8e
commit 6394353fa0
7 changed files with 83 additions and 74 deletions

View File

@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_menu_item_template"
style="@style/contextMenuText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ui_blue_spinner_list_bg"
android:textColor="@color/ui_blue_textbutton_textcolor"
android:visibility="gone" />
android:layout_height="wrap_content" />

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ui_blue_listseparator" />

View File

@@ -1,24 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/custom_menu_item_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ui_blue_spinner_list_bg"
android:textColor="@color/ui_blue_textbutton_textcolor"
android:visibility="gone"/>
<TextView
android:id="@+id/custom_submenu_item_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ui_blue_spinner_list_bg"
android:textColor="@color/ui_blue_textbutton_textcolor"
android:drawableRight="@drawable/ui_blue_submenu_indicator"
android:visibility="gone"/>
android:orientation="horizontal"
>
</LinearLayout>
<LinearLayout
android:id="@+id/custom_menu_items_wrapper"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>

View File

@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_submenu_item_template"
style="@style/contextMenuText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ui_blue_spinner_list_bg"
android:drawableRight="@drawable/ui_blue_submenu_indicator"
android:textColor="@color/ui_blue_textbutton_textcolor"
android:visibility="gone" />
android:drawableRight="@drawable/ui_blue_submenu_indicator" />

View File

@@ -210,6 +210,11 @@
<!-- <item name="android:background">@drawable/ui_blue_spinner_list_bg</item> -->
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
</style>
<style name="contextMenuText" parent="android:Widget.TextView">
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
<item name="android:textSize">@dimen/titletext</item>
</style>
<style name="titleWithIcon" parent="@style/textWithIcon">
<item name="android:textSize">@dimen/titletext</item>

View File

@@ -20,6 +20,7 @@ import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter;
import com.gpl.rpg.AndorsTrail.view.SpinnerEmulator;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -272,19 +273,20 @@ public final class HeroinfoActivity_Inventory extends Fragment implements Custom
// public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {}
// ItemType type = getSelectedItemType((AdapterContextMenuInfo) menuInfo);
public void showContextMenuForItem(ItemType type) {
MenuInflater inflater = getActivity().getMenuInflater();
Menu menu = CustomMenuInflater.newMenuInstance(getActivity());
inflater.inflate(R.menu.inventoryitem, menu);
if (type.isUsable()){
menu.findItem(R.id.inv_menu_use).setVisible(true);
menu.findItem(R.id.inv_menu_assign).setVisible(true);
}
if (type.isEquippable()) {
menu.findItem(R.id.inv_menu_equip).setVisible(true);
if (type.isOffhandCapableWeapon()) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
else if (type.category.inventorySlot == Inventory.WearSlot.leftring) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
}
inflater.inflate(R.menu.inventoryitem, menu);
if (type.isUsable()){
menu.findItem(R.id.inv_menu_use).setVisible(true);
menu.findItem(R.id.inv_menu_assign).setVisible(true);
}
if (type.isEquippable()) {
menu.findItem(R.id.inv_menu_equip).setVisible(true);
if (type.isOffhandCapableWeapon()) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
else if (type.category.inventorySlot == Inventory.WearSlot.leftring) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true);
}
lastSelectedItem = null;
CustomMenuInflater.showMenuInDialog(getActivity(), menu, world.tileManager.getDrawableForItem(getResources(), type.iconID, world.tileManager.loadTilesFor(Arrays.asList(new Integer[] { type.iconID}), getResources())), type.getName(player), type, this);
}

View File

@@ -21,6 +21,8 @@ import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class CustomMenuInflater {
@@ -29,69 +31,89 @@ public class CustomMenuInflater {
public void onMenuItemSelected(MenuItem item, Object data);
}
public static void showMenuInDialog(Activity activity, Menu menu, Drawable icon, String title, Object data, MenuItemSelectedListener listener ) {
getMenuDialog(activity, menu, icon, title, data, listener).show();
public static Dialog showMenuInDialog(Activity activity, Menu menu, Drawable icon, String title, Object data, MenuItemSelectedListener listener ) {
Dialog d = getMenuDialog(activity, menu, icon, title, data, listener);
d.show();
return d;
}
public static Dialog getMenuDialog(Activity activity, Menu menu, Drawable icon, String title, Object data, MenuItemSelectedListener listener ) {
View v = getMenuView(activity, menu, icon, title, data, listener);
final CustomDialog dialog = CustomDialogFactory.createDialog(activity, title, icon, null, v, false);
final CustomDialog dialog = CustomDialogFactory.createDialog(activity, title, icon, null, null, false);
View v = getMenuView(activity, menu, icon, title, data, dialog, listener);
v.setLayoutParams(getItemLayoutParams());
CustomDialogFactory.setContent(dialog, v);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
return dialog;
}
public static View getMenuView(Activity activity, Menu menu, Drawable icon, String title, Object data, MenuItemSelectedListener listener ) {
ViewGroup vg = (ViewGroup) activity.getLayoutInflater().inflate(R.layout.custom_menu_layout, null);
public static View getMenuView(Activity activity, Menu menu, Drawable icon, String title, Object data, Dialog dialog, MenuItemSelectedListener listener ) {
ViewGroup scroll = (ViewGroup) activity.getLayoutInflater().inflate(R.layout.custom_menu_layout, null);
ViewGroup vg = (ViewGroup) scroll.findViewById(R.id.custom_menu_items_wrapper);
MenuItem item;
boolean first =true;
for (int i = 0; i < menu.size(); i++) {
item = menu.getItem(i);
if (item.isVisible()) {
if (item.hasSubMenu()) {
addMenuItemView(activity, vg, item, data, listener);
if (first) {
first = false;
} else {
addSubMenuItemView(activity, vg, icon, title, item, data, listener);
addMenuItemSeparator(activity, vg);
}
if (item.hasSubMenu()) {
addSubMenuItemView(activity, vg, icon, title, item, data, dialog, listener);
} else {
addMenuItemView(activity, vg, item, data, dialog, listener);
}
}
}
return vg;
return scroll;
}
private static void addMenuItemView(Activity activity, ViewGroup vg, final MenuItem item, final Object data, final MenuItemSelectedListener listener) {
ViewGroup shell = (ViewGroup) activity.getLayoutInflater().inflate(R.layout.custom_menu_item_layout, vg);
TextView tv = (TextView) shell.findViewById(R.id.custom_menu_item_template);
shell.removeView(tv);
private static void addMenuItemView(Activity activity, ViewGroup vg, final MenuItem item, final Object data, final Dialog dialog, final MenuItemSelectedListener listener) {
TextView tv = (TextView) activity.getLayoutInflater().inflate(R.layout.custom_menu_item_layout, null);
tv.setText(item.getTitle());
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
listener.onMenuItemSelected(item, data);
dialog.dismiss();
}
});
tv.setLayoutParams(getItemLayoutParams());
vg.addView(tv);
}
private static void addSubMenuItemView(final Activity activity, ViewGroup vg, final Drawable icon, final String title, final MenuItem item, final Object data, final MenuItemSelectedListener listener) {
ViewGroup shell = (ViewGroup) activity.getLayoutInflater().inflate(R.layout.custom_menu_submenu_layout, vg);
TextView tv = (TextView) shell.findViewById(R.id.custom_submenu_item_template);
shell.removeView(tv);
private static void addSubMenuItemView(final Activity activity, ViewGroup vg, final Drawable icon, final String title, final MenuItem item, final Object data, final Dialog dialog, final MenuItemSelectedListener listener) {
TextView tv = (TextView) activity.getLayoutInflater().inflate(R.layout.custom_menu_submenu_layout, null);
tv.setText(item.getTitle());
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showMenuInDialog(activity, item.getSubMenu(), icon, title, data, listener);
dialog.dismiss();
}
});
tv.setLayoutParams(getItemLayoutParams());
vg.addView(tv);
}
private static void addMenuItemSeparator(final Activity activity, ViewGroup vg) {
View v = activity.getLayoutInflater().inflate(R.layout.custom_menu_item_separator_layout, null);
v.setLayoutParams(getItemLayoutParams());
vg.addView(v);
}
private static LayoutParams getItemLayoutParams() {
return new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
}
public static Menu newMenuInstance(Context context) {
return new DummyMenu(context);
@@ -106,7 +128,6 @@ public class CustomMenuInflater {
this.context = context;
}
CharSequence title;
@Override
public MenuItem add(CharSequence title) {
MenuItem item = new DummyMenuItem(context, title, -1, null);
@@ -202,26 +223,21 @@ public class CustomMenuInflater {
@Override
public boolean isShortcutKey(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean performIdentifierAction(int id, int flags) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
// TODO Auto-generated method stub
return false;
}
@Override
public void removeGroup(int groupId) {
// TODO Auto-generated method stub
}
@Override
@@ -237,26 +253,18 @@ public class CustomMenuInflater {
@Override
public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
// TODO Auto-generated method stub
}
@Override
public void setGroupEnabled(int group, boolean enabled) {
// TODO Auto-generated method stub
}
@Override
public void setGroupVisible(int group, boolean visible) {
// TODO Auto-generated method stub
}
@Override
public void setQwertyMode(boolean isQwerty) {
// TODO Auto-generated method stub
}
@Override
@@ -272,7 +280,7 @@ public class CustomMenuInflater {
CharSequence title;
int id;
DummySubMenu subMenu;
boolean visible;
boolean visible = true;
public DummyMenuItem(Context context, CharSequence title, int id, DummySubMenu subMenu) {
this.context = context;