Spinner emulation for inventory filters. Allows greater control over

dropdown menu L&F.
This commit is contained in:
Zukero
2017-11-08 00:16:55 +01:00
parent 763c964b17
commit f161926a75
4 changed files with 87 additions and 48 deletions

View File

@@ -47,20 +47,22 @@
android:gravity="right"
android:orientation="horizontal" >
<Spinner
android:id="@+id/inventorylist_category_filters"
android:layout_width="wrap_content"
<Button
android:id="@+id/inventorylist_category_filters_button"
style="@style/AndorsTrail_Blue_SpinnerEmulator"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:orientation="horizontal"
android:prompt="@string/heroinfo_inventory_categories" />
android:text="" />
<Spinner
android:id="@+id/inventorylist_sort_filters"
android:layout_width="wrap_content"
<Button
android:id="@+id/inventorylist_sort_filters_button"
style="@style/AndorsTrail_Blue_SpinnerEmulator"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:prompt="@string/heroinfo_inventory_sort" />
android:text="" />
</LinearLayout>
</LinearLayout>

View File

@@ -53,6 +53,7 @@
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
<item name="android:textAppearanceListItem">@style/AndorsTrail_Blue_TextAppearance.ListItemTitle</item>
<item name="android:textAppearanceSmall">@style/AndorsTrail_Blue_TextAppearance.ListItemSubtitle</item>
<item name="android:groupIndicator">@drawable/ui_blue_radiobutton</item>
</style>

View File

@@ -94,6 +94,11 @@
<item name="android:gravity">start</item>
</style>
<style name="AndorsTrail_Blue_SpinnerEmulator" parent="android:style/Widget.Button">
<item name="android:background">@drawable/ui_blue_spinner</item>
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
</style>
<style name="AndorsTrail_Blue_SpinnerDropDown" parent="android:style/Widget.DropDownItem.Spinner">
<item name="android:background">@drawable/ui_blue_spinner_list_bg</item>
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
@@ -108,6 +113,7 @@
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
<item name="android:textAppearanceLarge">@style/AndorsTrail_Blue_TextAppearance.ListItemTitle</item>
<item name="android:textAppearanceSmall">@style/AndorsTrail_Blue_TextAppearance.ListItemSubtitle</item>
<item name="android:groupIndicator">@drawable/ui_blue_radiobutton</item>
</style>
<style name="AndorsTrail_Blue_PopupMenu" parent="android:style/Widget.PopupMenu">
@@ -119,16 +125,16 @@
</style>
<style name="AndorsTrail_Blue_PopupWindow" parent="android:style/Widget.PopupWindow">
<item name="android:popupBackground">@drawable/ui_blue_stdframe</item>
<item name="android:popupBackground">@android:color/transparent</item>
<item name="android:dropDownSelector">@drawable/ui_blue_spinner_list_bg</item>
<item name="android:background">@drawable/ui_blue_spinner_list_bg</item>
<item name="android:background">@drawable/ui_blue_stdframe</item>
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
<item name="android:checkMark">@drawable/ui_blue_radiobutton</item>
</style>
<style name="AndorsTrail_Blue_ListPopupWindow" parent="android:style/Widget.ListPopupWindow">
<item name="android:popupBackground">@drawable/ui_blue_stdframe</item>
<item name="android:background">@drawable/ui_blue_spinner_list_bg</item>
<item name="android:popupBackground">@android:color/transparent</item>
<item name="android:background">@drawable/ui_blue_stdframe</item>
<item name="android:dropDownSelector">@drawable/ui_blue_spinner_list_bg</item>
<item name="android:textColor">@color/ui_blue_textbutton_textcolor</item>
<item name="android:checkMark">@drawable/ui_blue_radiobutton</item>

View File

@@ -3,6 +3,7 @@ package com.gpl.rpg.AndorsTrail.activity.fragment;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.Dialogs;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.activity.CustomDialog;
import com.gpl.rpg.AndorsTrail.activity.ItemInfoActivity;
import com.gpl.rpg.AndorsTrail.context.ControllerContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
@@ -15,6 +16,7 @@ import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection;
import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -30,6 +32,7 @@ import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Spinner;
@@ -46,8 +49,6 @@ public final class HeroinfoActivity_Inventory extends Fragment {
private Player player;
private ListView inventoryList;
private Spinner inventorylist_categories;
private Spinner inventorylist_sort;
private ItemContainerAdapter inventoryListAdapter;
private ItemContainerAdapter inventoryWeaponsListAdapter;
private ItemContainerAdapter inventoryArmorListAdapter;
@@ -55,6 +56,13 @@ public final class HeroinfoActivity_Inventory extends Fragment {
private ItemContainerAdapter inventoryQuestListAdapter;
private ItemContainerAdapter inventoryOtherListAdapter;
private Button categoriesButton;
private Dialog categoriesDialog = null;
private ListView inventorylist_categories;
private Button sortButton;
private Dialog sortDialog = null;
private ListView inventorylist_sort;
private TextView heroinfo_stats_gold;
private TextView heroinfo_stats_attack;
@@ -79,8 +87,6 @@ public final class HeroinfoActivity_Inventory extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.heroinfo_inventory, container, false);
initialiseInventorySpinners(v);
inventoryList = (ListView) v.findViewById(R.id.inventorylist_root);
registerForContextMenu(inventoryList);
inventoryList.setOnItemClickListener(new OnItemClickListener() {
@@ -92,6 +98,31 @@ public final class HeroinfoActivity_Inventory extends Fragment {
}
});
initialiseInventorySpinners();
categoriesButton = (Button) v.findViewById(R.id.inventorylist_category_filters_button);
categoriesButton.setText(getResources().getStringArray(R.array.inventorylist_category_filters)[world.model.uiSelections.selectedInventoryCategory]);
categoriesButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (categoriesDialog == null) {
categoriesDialog = CustomDialog.createDialog(getActivity(), getActivity().getString(R.string.heroinfo_inventory_categories), null, null, inventorylist_categories, false);
}
CustomDialog.show(categoriesDialog);
}
});
sortButton = (Button) v.findViewById(R.id.inventorylist_sort_filters_button);
sortButton.setText(getResources().getStringArray(R.array.inventorylist_sort_filters)[world.model.uiSelections.selectedInventorySort]);
sortButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (sortDialog == null) {
sortDialog = CustomDialog.createDialog(getActivity(), getActivity().getString(R.string.heroinfo_inventory_sort), null, null, inventorylist_sort, false);
}
CustomDialog.show(sortDialog);
}
});
ItemContainer inv = player.inventory;
wornTiles = world.tileManager.loadTilesFor(player.inventory, getResources());
inventoryListAdapter = new ItemContainerAdapter(getActivity(), world.tileManager, inv, player, wornTiles);
@@ -118,51 +149,50 @@ public final class HeroinfoActivity_Inventory extends Fragment {
return v;
}
private void initialiseInventorySpinners(View v) {
inventorylist_categories = (Spinner) v.findViewById(R.id.inventorylist_category_filters);
ArrayAdapter<CharSequence> categoryFilterAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.inventorylist_category_filters, android.R.layout.simple_spinner_item);
categoryFilterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
private void initialiseInventorySpinners() {
inventorylist_categories = new ListView(getActivity());//(Spinner) v.findViewById(R.id.inventorylist_category_filters);
ArrayAdapter<CharSequence> categoryFilterAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.inventorylist_category_filters, android.R.layout.simple_list_item_1);
// categoryFilterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
inventorylist_categories.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, ListView.LayoutParams.WRAP_CONTENT));
inventorylist_categories.setAdapter(categoryFilterAdapter);
inventorylist_categories.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
inventorylist_categories.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
world.model.uiSelections.selectedInventoryCategory = inventorylist_categories.getSelectedItemPosition();
reloadShownCategory(world.model.uiSelections.selectedInventoryCategory);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
world.model.uiSelections.selectedInventoryCategory = 0;
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (world.model.uiSelections.selectedInventoryCategory == position) return;
world.model.uiSelections.selectedInventoryCategory = position;
categoriesButton.setText(getResources().getStringArray(R.array.inventorylist_category_filters)[position]);
categoriesDialog.dismiss();
reloadShownCategory(position);
}
});
inventorylist_categories.setSelection(world.model.uiSelections.selectedInventoryCategory);
inventorylist_sort = (Spinner) v.findViewById(R.id.inventorylist_sort_filters);
ArrayAdapter<CharSequence> sortFilterAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.inventorylist_sort_filters, android.R.layout.simple_spinner_item);
sortFilterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
inventorylist_sort = new ListView(getActivity());//(Spinner) v.findViewById(R.id.inventorylist_sort_filters);
ArrayAdapter<CharSequence> sortFilterAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.inventorylist_sort_filters, android.R.layout.simple_list_item_1);
// sortFilterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
inventorylist_sort.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, ListView.LayoutParams.WRAP_CONTENT));
inventorylist_sort.setAdapter(sortFilterAdapter);
inventorylist_sort.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
inventorylist_sort.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
world.model.uiSelections.selectedInventorySort = inventorylist_sort.getSelectedItemPosition();
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (world.model.uiSelections.selectedInventorySort == position) return;
world.model.uiSelections.selectedInventorySort = position;
sortButton.setText(getResources().getStringArray(R.array.inventorylist_sort_filters)[position]);
sortDialog.dismiss();
reloadShownSort(player.inventory);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Reset to "Custom" position
world.model.uiSelections.selectedInventorySort = 0;
}
});
inventorylist_sort.setSelection(world.model.uiSelections.selectedInventorySort);
}
private void setHeroStatsVisiblity(int visibility) {
heroinfo_stats_gold.setVisibility(visibility);
heroinfo_stats_attack.setVisibility(visibility);
heroinfo_stats_defense.setVisibility(visibility);
}
// private void setHeroStatsVisiblity(int visibility) {
// heroinfo_stats_gold.setVisibility(visibility);
// heroinfo_stats_attack.setVisibility(visibility);
// heroinfo_stats_defense.setVisibility(visibility);
// }
@Override
public void onStart() {