More Tweaks
This commit is contained in:
parent
efacd10fb5
commit
fd2afd5bba
@ -3,20 +3,7 @@
|
|||||||
<component name="deploymentTargetDropDown">
|
<component name="deploymentTargetDropDown">
|
||||||
<value>
|
<value>
|
||||||
<entry key="app">
|
<entry key="app">
|
||||||
<State>
|
<State />
|
||||||
<runningDeviceTargetSelectedWithDropDown>
|
|
||||||
<Target>
|
|
||||||
<type value="RUNNING_DEVICE_TARGET" />
|
|
||||||
<deviceKey>
|
|
||||||
<Key>
|
|
||||||
<type value="SERIAL_NUMBER" />
|
|
||||||
<value value="R5CRB1GE0RY" />
|
|
||||||
</Key>
|
|
||||||
</deviceKey>
|
|
||||||
</Target>
|
|
||||||
</runningDeviceTargetSelectedWithDropDown>
|
|
||||||
<timeTargetWasSelectedWithDropDown value="2024-02-17T18:39:39.847936576Z" />
|
|
||||||
</State>
|
|
||||||
</entry>
|
</entry>
|
||||||
</value>
|
</value>
|
||||||
</component>
|
</component>
|
||||||
|
@ -10,6 +10,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import com.thebrokenrail.mtudining.activity.menu.MenuActivity;
|
import com.thebrokenrail.mtudining.activity.menu.MenuActivity;
|
||||||
import com.thebrokenrail.mtudining.activity.task.Task;
|
import com.thebrokenrail.mtudining.activity.task.Task;
|
||||||
import com.thebrokenrail.mtudining.activity.task.TaskAdapter;
|
import com.thebrokenrail.mtudining.activity.task.TaskAdapter;
|
||||||
|
import com.thebrokenrail.mtudining.api.method.AllLocations;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
import com.thebrokenrail.mtudining.widget.CategoryView;
|
import com.thebrokenrail.mtudining.widget.CategoryView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,18 +33,14 @@ class ListAdapter extends TaskAdapter<ListData> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void bindItemView(View view, int position) {
|
protected void bindItemView(View view, int position) {
|
||||||
ListData.Category data = getResult().categories.get(position - getFirstElementPosition());
|
Category<AllLocations.Response.Location> data = getResult().categories.get(position - getFirstElementPosition());
|
||||||
// Setup View
|
// Setup View
|
||||||
CategoryView category = (CategoryView) view;
|
CategoryView category = (CategoryView) view;
|
||||||
category.setup(data.isOpen, data.name, () -> {
|
category.setup(data, () -> {
|
||||||
// Open/Close Category
|
// Open/Close Category
|
||||||
data.isOpen = !data.isOpen;
|
data.isOpen = !data.isOpen;
|
||||||
notifyItemChanged(getResult().categories.indexOf(data) + getFirstElementPosition());
|
notifyItemChanged(getResult().categories.indexOf(data) + getFirstElementPosition());
|
||||||
});
|
}, location -> {
|
||||||
// Add Locations
|
|
||||||
category.clearItems();
|
|
||||||
for (ListData.Category.Element location : data.locations) {
|
|
||||||
category.addItem(location.name, () -> {
|
|
||||||
// Open Menu
|
// Open Menu
|
||||||
Intent intent = new Intent(category.getContext(), MenuActivity.class);
|
Intent intent = new Intent(category.getContext(), MenuActivity.class);
|
||||||
intent.putExtra(MenuActivity.ID_EXTRA, location.id);
|
intent.putExtra(MenuActivity.ID_EXTRA, location.id);
|
||||||
@ -50,7 +48,6 @@ class ListAdapter extends TaskAdapter<ListData> {
|
|||||||
category.getContext().startActivity(intent);
|
category.getContext().startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getDataSize() {
|
protected int getDataSize() {
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.thebrokenrail.mtudining.activity.list;
|
package com.thebrokenrail.mtudining.activity.list;
|
||||||
|
|
||||||
|
import com.thebrokenrail.mtudining.api.method.AllLocations;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -7,28 +10,8 @@ import java.util.List;
|
|||||||
* Data to be displayed in {@link ListActivity}.
|
* Data to be displayed in {@link ListActivity}.
|
||||||
*/
|
*/
|
||||||
class ListData {
|
class ListData {
|
||||||
public static class Category {
|
|
||||||
public static class Element {
|
|
||||||
public final String id;
|
|
||||||
public final String name;
|
|
||||||
|
|
||||||
public Element(String id, String name) {
|
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String name;
|
|
||||||
public boolean isOpen = true;
|
|
||||||
public final List<Element> locations = new ArrayList<>();
|
|
||||||
|
|
||||||
public Category(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String siteId;
|
public final String siteId;
|
||||||
public final List<Category> categories = new ArrayList<>();
|
public final List<Category<AllLocations.Response.Location>> categories = new ArrayList<>();
|
||||||
|
|
||||||
ListData(String siteId) {
|
ListData(String siteId) {
|
||||||
this.siteId = siteId;
|
this.siteId = siteId;
|
||||||
|
@ -4,6 +4,7 @@ import com.thebrokenrail.mtudining.activity.task.Task;
|
|||||||
import com.thebrokenrail.mtudining.api.Connection;
|
import com.thebrokenrail.mtudining.api.Connection;
|
||||||
import com.thebrokenrail.mtudining.api.method.AllLocations;
|
import com.thebrokenrail.mtudining.api.method.AllLocations;
|
||||||
import com.thebrokenrail.mtudining.api.method.Info;
|
import com.thebrokenrail.mtudining.api.method.Info;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
import com.thebrokenrail.mtudining.util.Constants;
|
import com.thebrokenrail.mtudining.util.Constants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,15 +31,15 @@ class ListTask extends Task<ListData> {
|
|||||||
for (AllLocations.Response.Building building : allLocationsResponse.buildings) {
|
for (AllLocations.Response.Building building : allLocationsResponse.buildings) {
|
||||||
if (building.active) {
|
if (building.active) {
|
||||||
// Found Active Building
|
// Found Active Building
|
||||||
ListData.Category category = new ListData.Category(building.name);
|
Category<AllLocations.Response.Location> category = new Category<>(building.name);
|
||||||
for (AllLocations.Response.Location location : building.locations) {
|
for (AllLocations.Response.Location location : building.locations) {
|
||||||
if (location.active) {
|
if (location.active) {
|
||||||
// Found Active Location
|
// Found Active Location
|
||||||
category.locations.add(new ListData.Category.Element(location.id, location.name));
|
category.items.add(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Skip Empty Category
|
// Skip Empty Category
|
||||||
if (category.locations.size() > 0) {
|
if (category.items.size() > 0) {
|
||||||
data.categories.add(category);
|
data.categories.add(category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.thebrokenrail.mtudining.activity.menu;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog for a food item.
|
||||||
|
*/
|
||||||
|
public class ItemDialog {
|
||||||
|
public void show() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,8 @@ import com.google.android.material.textfield.TextInputLayout;
|
|||||||
import com.thebrokenrail.mtudining.R;
|
import com.thebrokenrail.mtudining.R;
|
||||||
import com.thebrokenrail.mtudining.activity.task.Task;
|
import com.thebrokenrail.mtudining.activity.task.Task;
|
||||||
import com.thebrokenrail.mtudining.activity.task.TaskAdapter;
|
import com.thebrokenrail.mtudining.activity.task.TaskAdapter;
|
||||||
|
import com.thebrokenrail.mtudining.api.method.PeriodDetail;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
import com.thebrokenrail.mtudining.util.DateUtil;
|
import com.thebrokenrail.mtudining.util.DateUtil;
|
||||||
import com.thebrokenrail.mtudining.widget.CategoryView;
|
import com.thebrokenrail.mtudining.widget.CategoryView;
|
||||||
import com.thebrokenrail.mtudining.widget.CustomDropDownView;
|
import com.thebrokenrail.mtudining.widget.CustomDropDownView;
|
||||||
@ -56,22 +58,17 @@ class MenuAdapter extends TaskAdapter<MenuData> {
|
|||||||
protected void bindItemView(View view, int position) {
|
protected void bindItemView(View view, int position) {
|
||||||
MenuData.Meal meal = getMeal();
|
MenuData.Meal meal = getMeal();
|
||||||
assert meal != null;
|
assert meal != null;
|
||||||
MenuData.Meal.Category data = meal.categories.get(position - getFirstElementPosition());
|
Category<PeriodDetail.Response.Menu.PeriodData.MenuCategory.MenuItem> data = meal.categories.get(position - getFirstElementPosition());
|
||||||
// Setup View
|
// Setup View
|
||||||
CategoryView category = (CategoryView) view;
|
CategoryView category = (CategoryView) view;
|
||||||
category.setup(data.isOpen, data.name, () -> {
|
category.setup(data, () -> {
|
||||||
// Open/Close Category
|
// Open/Close Category
|
||||||
data.isOpen = !data.isOpen;
|
data.isOpen = !data.isOpen;
|
||||||
notifyItemChanged(meal.categories.indexOf(data) + getFirstElementPosition());
|
notifyItemChanged(meal.categories.indexOf(data) + getFirstElementPosition());
|
||||||
});
|
}, item -> {
|
||||||
// Add Locations
|
|
||||||
category.clearItems();
|
|
||||||
for (MenuData.Meal.Category.Element item : data.items) {
|
|
||||||
category.addItem(item.name, () -> {
|
|
||||||
// Do Something!
|
// Do Something!
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getDataSize() {
|
protected int getDataSize() {
|
||||||
|
@ -1,33 +1,16 @@
|
|||||||
package com.thebrokenrail.mtudining.activity.menu;
|
package com.thebrokenrail.mtudining.activity.menu;
|
||||||
|
|
||||||
|
import com.thebrokenrail.mtudining.api.method.PeriodDetail;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
class MenuData {
|
class MenuData {
|
||||||
public static class Meal {
|
public static class Meal {
|
||||||
public static class Category {
|
|
||||||
public static class Element {
|
|
||||||
public final String name;
|
|
||||||
public final String description;
|
|
||||||
|
|
||||||
public Element(String name, String description) {
|
|
||||||
this.name = name;
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String name;
|
|
||||||
public boolean isOpen = true;
|
|
||||||
public final List<Element> items = new ArrayList<>();
|
|
||||||
|
|
||||||
public Category(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String id;
|
public final String id;
|
||||||
public final String name;
|
public final String name;
|
||||||
public final List<Category> categories = new ArrayList<>();
|
public final List<Category<PeriodDetail.Response.Menu.PeriodData.MenuCategory.MenuItem>> categories = new ArrayList<>();
|
||||||
|
|
||||||
public Meal(String id, String name) {
|
public Meal(String id, String name) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
@ -4,6 +4,7 @@ import com.thebrokenrail.mtudining.activity.task.Task;
|
|||||||
import com.thebrokenrail.mtudining.api.Connection;
|
import com.thebrokenrail.mtudining.api.Connection;
|
||||||
import com.thebrokenrail.mtudining.api.method.PeriodDetail;
|
import com.thebrokenrail.mtudining.api.method.PeriodDetail;
|
||||||
import com.thebrokenrail.mtudining.api.method.Periods;
|
import com.thebrokenrail.mtudining.api.method.Periods;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
import com.thebrokenrail.mtudining.util.Constants;
|
import com.thebrokenrail.mtudining.util.Constants;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@ -77,15 +78,13 @@ public class MenuTask extends Task<MenuData> {
|
|||||||
|
|
||||||
// Add Data
|
// Add Data
|
||||||
for (PeriodDetail.Response.Menu.PeriodData.MenuCategory category : periodDetailResponse.menu.periods.categories) {
|
for (PeriodDetail.Response.Menu.PeriodData.MenuCategory category : periodDetailResponse.menu.periods.categories) {
|
||||||
MenuData.Meal.Category menuCategory = new MenuData.Meal.Category(category.name);
|
Category<PeriodDetail.Response.Menu.PeriodData.MenuCategory.MenuItem> menuCategory = new Category<>(category.name);
|
||||||
|
|
||||||
// Sort Items
|
// Sort Items
|
||||||
category.items.sort(Comparator.comparingInt(a -> a.sort_order));
|
category.items.sort(Comparator.comparingInt(a -> a.sort_order));
|
||||||
|
|
||||||
// Add Items To Category
|
// Add Items To Category
|
||||||
for (PeriodDetail.Response.Menu.PeriodData.MenuCategory.MenuItem item : category.items) {
|
menuCategory.items.addAll(category.items);
|
||||||
menuCategory.items.add(new MenuData.Meal.Category.Element(item.name, item.desc));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip Empty Category
|
// Skip Empty Category
|
||||||
if (menuCategory.items.size() > 0) {
|
if (menuCategory.items.size() > 0) {
|
||||||
|
@ -202,7 +202,7 @@ public abstract class TaskAdapter<E> extends RecyclerView.Adapter<RecyclerView.V
|
|||||||
*/
|
*/
|
||||||
protected void reloadUI(int oldItemCount) {
|
protected void reloadUI(int oldItemCount) {
|
||||||
// Reload Header Without Animation
|
// Reload Header Without Animation
|
||||||
notifyItemChanged(0, new Object());
|
notifyItemChanged(0, new Object()); // https://stackoverflow.com/a/45590003
|
||||||
// Remove Existing Items
|
// Remove Existing Items
|
||||||
notifyItemRangeRemoved(1, oldItemCount - 1);
|
notifyItemRangeRemoved(1, oldItemCount - 1);
|
||||||
// Add Items
|
// Add Items
|
||||||
|
@ -49,7 +49,6 @@ public class Connection {
|
|||||||
public <T> void send(Method<T> method, Consumer<T> success, Runnable error) {
|
public <T> void send(Method<T> method, Consumer<T> success, Runnable error) {
|
||||||
// Build URL
|
// Build URL
|
||||||
String url = Constants.API_BASE + method.getPath();
|
String url = Constants.API_BASE + method.getPath();
|
||||||
System.out.println("GO: " + url);
|
|
||||||
|
|
||||||
// Build Request
|
// Build Request
|
||||||
Request request = new Request.Builder()
|
Request request = new Request.Builder()
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.thebrokenrail.mtudining.api.method;
|
package com.thebrokenrail.mtudining.api.method;
|
||||||
|
|
||||||
import com.thebrokenrail.mtudining.api.Method;
|
import com.thebrokenrail.mtudining.api.Method;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -38,10 +39,15 @@ public class AllLocations implements Method<AllLocations.Response> {
|
|||||||
public List<Location> locations;
|
public List<Location> locations;
|
||||||
}
|
}
|
||||||
public List<Building> buildings;
|
public List<Building> buildings;
|
||||||
public static class Location {
|
public static class Location implements Category.Named {
|
||||||
public String id;
|
public String id;
|
||||||
public String name;
|
public String name;
|
||||||
public boolean active;
|
public boolean active;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public List<Location> locations;
|
public List<Location> locations;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.thebrokenrail.mtudining.api.method;
|
package com.thebrokenrail.mtudining.api.method;
|
||||||
|
|
||||||
import com.thebrokenrail.mtudining.api.Method;
|
import com.thebrokenrail.mtudining.api.Method;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
import com.thebrokenrail.mtudining.util.DateUtil;
|
import com.thebrokenrail.mtudining.util.DateUtil;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -33,10 +34,15 @@ public class PeriodDetail implements Method<PeriodDetail.Response> {
|
|||||||
public static class Menu {
|
public static class Menu {
|
||||||
public static class PeriodData {
|
public static class PeriodData {
|
||||||
public static class MenuCategory {
|
public static class MenuCategory {
|
||||||
public static class MenuItem {
|
public static class MenuItem implements Category.Named {
|
||||||
public String name;
|
public String name;
|
||||||
public String desc;
|
public String desc;
|
||||||
public int sort_order;
|
public int sort_order;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public String name;
|
public String name;
|
||||||
public List<MenuItem> items;
|
public List<MenuItem> items;
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.thebrokenrail.mtudining.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple class representing a category.
|
||||||
|
*/
|
||||||
|
public class Category<T extends Category.Named> {
|
||||||
|
public Category(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface Named {
|
||||||
|
String getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Category name.
|
||||||
|
*/
|
||||||
|
public final String name;
|
||||||
|
/**
|
||||||
|
* If category is open.
|
||||||
|
*/
|
||||||
|
public boolean isOpen = true;
|
||||||
|
/**
|
||||||
|
* Category items.
|
||||||
|
*/
|
||||||
|
public final List<T> items = new ArrayList<>();
|
||||||
|
}
|
@ -13,6 +13,9 @@ import androidx.appcompat.widget.AppCompatTextView;
|
|||||||
|
|
||||||
import com.google.android.material.card.MaterialCardView;
|
import com.google.android.material.card.MaterialCardView;
|
||||||
import com.thebrokenrail.mtudining.R;
|
import com.thebrokenrail.mtudining.R;
|
||||||
|
import com.thebrokenrail.mtudining.util.Category;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Widget that shows a category of items.
|
* Widget that shows a category of items.
|
||||||
@ -64,21 +67,26 @@ public class CategoryView extends FrameLayout {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup widget.
|
* Setup widget.
|
||||||
* @param isOpen If category is open
|
* @param category The category
|
||||||
* @param titleText The category's title
|
|
||||||
* @param onClickTitle Callback when clicking on title
|
* @param onClickTitle Callback when clicking on title
|
||||||
|
* @param onClickItem Callback when clicking on an item
|
||||||
*/
|
*/
|
||||||
public void setup(boolean isOpen, String titleText, Runnable onClickTitle) {
|
public <T extends Category.Named> void setup(Category<T> category, Runnable onClickTitle, Consumer<T> onClickItem) {
|
||||||
titleText = (isOpen ? "▼" : "▶") + " " + titleText;
|
String titleText = (category.isOpen ? "▼" : "▶") + " " + category.name;
|
||||||
title.setText(titleText);
|
title.setText(titleText);
|
||||||
card.setVisibility(isOpen ? VISIBLE : GONE);
|
card.setVisibility(category.isOpen ? VISIBLE : GONE);
|
||||||
title.setOnClickListener(v -> onClickTitle.run());
|
title.setOnClickListener(v -> onClickTitle.run());
|
||||||
|
// Add Items
|
||||||
|
clearItems();
|
||||||
|
for (T item : category.items) {
|
||||||
|
addItem(item.getName(), () -> onClickItem.accept(item));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear category.
|
* Clear category.
|
||||||
*/
|
*/
|
||||||
public void clearItems() {
|
private void clearItems() {
|
||||||
children.removeAllViews();
|
children.removeAllViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +95,7 @@ public class CategoryView extends FrameLayout {
|
|||||||
* @param name Item name
|
* @param name Item name
|
||||||
* @param onClick Click handler
|
* @param onClick Click handler
|
||||||
*/
|
*/
|
||||||
public void addItem(String name, Runnable onClick) {
|
private void addItem(String name, Runnable onClick) {
|
||||||
AppCompatTextView item = new AppCompatTextView(getContext());
|
AppCompatTextView item = new AppCompatTextView(getContext());
|
||||||
// Text
|
// Text
|
||||||
item.setText(name);
|
item.setText(name);
|
||||||
|
@ -3,14 +3,15 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="vertical">
|
android:orientation="horizontal"
|
||||||
|
android:padding="@dimen/margin">
|
||||||
|
|
||||||
<!-- Date -->
|
<!-- Date -->
|
||||||
<com.thebrokenrail.mtudining.widget.CustomDropDownView
|
<com.thebrokenrail.mtudining.widget.CustomDropDownView
|
||||||
android:id="@+id/menu_date_field"
|
android:id="@+id/menu_date_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="@dimen/margin"
|
android:layout_weight="1"
|
||||||
android:hint="@string/date"
|
android:hint="@string/date"
|
||||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
||||||
app:endIconMode="custom"
|
app:endIconMode="custom"
|
||||||
@ -24,14 +25,17 @@
|
|||||||
|
|
||||||
</com.thebrokenrail.mtudining.widget.CustomDropDownView>
|
</com.thebrokenrail.mtudining.widget.CustomDropDownView>
|
||||||
|
|
||||||
|
<!-- Padding -->
|
||||||
|
<View
|
||||||
|
android:layout_width="@dimen/margin"
|
||||||
|
android:layout_height="0dp" />
|
||||||
|
|
||||||
<!-- Meal -->
|
<!-- Meal -->
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/menu_meal_field"
|
android:id="@+id/menu_meal_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/margin"
|
android:layout_weight="1"
|
||||||
android:layout_marginStart="@dimen/margin"
|
|
||||||
android:layout_marginEnd="@dimen/margin"
|
|
||||||
android:hint="@string/meal"
|
android:hint="@string/meal"
|
||||||
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user