Updated Filterdropdown design for pets
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
package com.example.petstoremobile.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import com.example.petstoremobile.R;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that overrides the arrayAdapter so the text color is white and background is transparent.
|
||||||
|
*/
|
||||||
|
public class WhiteTextArrayAdapter<T> extends ArrayAdapter<T> {
|
||||||
|
public WhiteTextArrayAdapter(@NonNull Context context, int resource, @NonNull T[] objects) {
|
||||||
|
super(context, resource, objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WhiteTextArrayAdapter(@NonNull Context context, int resource, @NonNull List<T> objects) {
|
||||||
|
super(context, resource, objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||||
|
View view = super.getView(position, convertView, parent);
|
||||||
|
view.setBackgroundColor(Color.TRANSPARENT);
|
||||||
|
if (view instanceof TextView) {
|
||||||
|
((TextView) view).setTextColor(Color.WHITE);
|
||||||
|
}
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
|
||||||
|
View view = super.getDropDownView(position, convertView, parent);
|
||||||
|
view.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.primary_dark));
|
||||||
|
if (view instanceof TextView) {
|
||||||
|
((TextView) view).setTextColor(Color.WHITE);
|
||||||
|
}
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,8 +19,8 @@ import android.widget.AdapterView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.example.petstoremobile.R;
|
import com.example.petstoremobile.R;
|
||||||
import com.example.petstoremobile.adapters.BlackTextArrayAdapter;
|
|
||||||
import com.example.petstoremobile.adapters.PetAdapter;
|
import com.example.petstoremobile.adapters.PetAdapter;
|
||||||
|
import com.example.petstoremobile.adapters.WhiteTextArrayAdapter;
|
||||||
import com.example.petstoremobile.databinding.FragmentPetBinding;
|
import com.example.petstoremobile.databinding.FragmentPetBinding;
|
||||||
import com.example.petstoremobile.dtos.PetDTO;
|
import com.example.petstoremobile.dtos.PetDTO;
|
||||||
import com.example.petstoremobile.dtos.StoreDTO;
|
import com.example.petstoremobile.dtos.StoreDTO;
|
||||||
@@ -145,7 +145,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen
|
|||||||
*/
|
*/
|
||||||
private void setupStatusFilter() {
|
private void setupStatusFilter() {
|
||||||
String[] statuses = {"All Statuses", "Available", "Adopted"};
|
String[] statuses = {"All Statuses", "Available", "Adopted"};
|
||||||
BlackTextArrayAdapter<String> adapter = new BlackTextArrayAdapter<>(requireContext(), android.R.layout.simple_spinner_item, statuses);
|
WhiteTextArrayAdapter<String> adapter = new WhiteTextArrayAdapter<>(requireContext(), android.R.layout.simple_spinner_item, statuses);
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
binding.spinnerStatus.setAdapter(adapter);
|
binding.spinnerStatus.setAdapter(adapter);
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen
|
|||||||
*/
|
*/
|
||||||
private void setupSpeciesFilter() {
|
private void setupSpeciesFilter() {
|
||||||
String[] species = {"All Species", "Dog", "Cat", "Bird", "Rabbit", "Fish", "Hamster"};
|
String[] species = {"All Species", "Dog", "Cat", "Bird", "Rabbit", "Fish", "Hamster"};
|
||||||
BlackTextArrayAdapter<String> adapter = new BlackTextArrayAdapter<>(requireContext(), android.R.layout.simple_spinner_item, species);
|
WhiteTextArrayAdapter<String> adapter = new WhiteTextArrayAdapter<>(requireContext(), android.R.layout.simple_spinner_item, species);
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
binding.spinnerSpecies.setAdapter(adapter);
|
binding.spinnerSpecies.setAdapter(adapter);
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen
|
|||||||
storeViewModel.getAllStores(0, 100).observe(getViewLifecycleOwner(), resource -> {
|
storeViewModel.getAllStores(0, 100).observe(getViewLifecycleOwner(), resource -> {
|
||||||
if (resource.status == Resource.Status.SUCCESS && resource.data != null) {
|
if (resource.status == Resource.Status.SUCCESS && resource.data != null) {
|
||||||
storeList = resource.data.getContent();
|
storeList = resource.data.getContent();
|
||||||
SpinnerUtils.populateSpinner(requireContext(), binding.spinnerStore, storeList,
|
SpinnerUtils.populateWhiteSpinner(requireContext(), binding.spinnerStore, storeList,
|
||||||
StoreDTO::getStoreName, "All Stores", -1L, StoreDTO::getStoreId);
|
StoreDTO::getStoreName, "All Stores", -1L, StoreDTO::getStoreId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
|
||||||
import com.example.petstoremobile.adapters.BlackTextArrayAdapter;
|
import com.example.petstoremobile.adapters.BlackTextArrayAdapter;
|
||||||
|
import com.example.petstoremobile.adapters.WhiteTextArrayAdapter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -22,6 +23,22 @@ public class SpinnerUtils {
|
|||||||
public static <T> void populateSpinner(Context context, Spinner spinner, List<T> data,
|
public static <T> void populateSpinner(Context context, Spinner spinner, List<T> data,
|
||||||
Function<T, String> nameExtractor, String defaultText,
|
Function<T, String> nameExtractor, String defaultText,
|
||||||
Long preselectedId, Function<T, Long> idExtractor) {
|
Long preselectedId, Function<T, Long> idExtractor) {
|
||||||
|
populateSpinnerWithAdapter(context, spinner, data, nameExtractor, defaultText, preselectedId, idExtractor, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populates a spinner with white text (for dark backgrounds).
|
||||||
|
*/
|
||||||
|
public static <T> void populateWhiteSpinner(Context context, Spinner spinner, List<T> data,
|
||||||
|
Function<T, String> nameExtractor, String defaultText,
|
||||||
|
Long preselectedId, Function<T, Long> idExtractor) {
|
||||||
|
populateSpinnerWithAdapter(context, spinner, data, nameExtractor, defaultText, preselectedId, idExtractor, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> void populateSpinnerWithAdapter(Context context, Spinner spinner, List<T> data,
|
||||||
|
Function<T, String> nameExtractor, String defaultText,
|
||||||
|
Long preselectedId, Function<T, Long> idExtractor,
|
||||||
|
boolean useWhiteText) {
|
||||||
List<String> names = new ArrayList<>();
|
List<String> names = new ArrayList<>();
|
||||||
if (defaultText != null) {
|
if (defaultText != null) {
|
||||||
names.add(defaultText);
|
names.add(defaultText);
|
||||||
@@ -31,8 +48,15 @@ public class SpinnerUtils {
|
|||||||
names.add(nameExtractor.apply(item));
|
names.add(nameExtractor.apply(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
spinner.setAdapter(new BlackTextArrayAdapter<>(context,
|
ArrayAdapter<String> adapter;
|
||||||
android.R.layout.simple_spinner_item, names));
|
if (useWhiteText) {
|
||||||
|
adapter = new WhiteTextArrayAdapter<>(context, android.R.layout.simple_spinner_item, names);
|
||||||
|
} else {
|
||||||
|
adapter = new BlackTextArrayAdapter<>(context, android.R.layout.simple_spinner_item, names);
|
||||||
|
}
|
||||||
|
|
||||||
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
spinner.setAdapter(adapter);
|
||||||
|
|
||||||
if (preselectedId != null && preselectedId != -1) {
|
if (preselectedId != null && preselectedId != -1) {
|
||||||
int offset = (defaultText != null) ? 1 : 0;
|
int offset = (defaultText != null) ? 1 : 0;
|
||||||
|
|||||||
6
android/app/src/main/res/drawable/bg_search_bar.xml
Normal file
6
android/app/src/main/res/drawable/bg_search_bar.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/white"/>
|
||||||
|
<corners android:radius="22dp"/>
|
||||||
|
</shape>
|
||||||
7
android/app/src/main/res/drawable/bg_spinner.xml
Normal file
7
android/app/src/main/res/drawable/bg_spinner.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#1AFFFFFF"/>
|
||||||
|
<stroke android:width="1dp" android:color="#33FFFFFF"/>
|
||||||
|
<corners android:radius="8dp"/>
|
||||||
|
</shape>
|
||||||
@@ -54,50 +54,81 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="8dp"
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:paddingTop="10dp"
|
||||||
|
android:paddingBottom="10dp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:background="@color/white">
|
android:background="@color/primary_dark"
|
||||||
|
android:elevation="4dp">
|
||||||
|
|
||||||
<EditText
|
<LinearLayout
|
||||||
android:id="@+id/etSearchPet"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp"
|
android:layout_height="44dp"
|
||||||
android:hint="Search..."
|
android:background="@drawable/bg_search_bar"
|
||||||
android:inputType="text"
|
android:gravity="center_vertical"
|
||||||
android:drawableStart="@android:drawable/ic_menu_search"
|
android:paddingStart="12dp"
|
||||||
android:drawablePadding="8dp"
|
android:paddingEnd="12dp">
|
||||||
android:background="@android:color/transparent"
|
|
||||||
android:padding="12dp"
|
<ImageView
|
||||||
android:textColor="@color/text_dark"/>
|
android:layout_width="18dp"
|
||||||
|
android:layout_height="18dp"
|
||||||
|
android:src="@android:drawable/ic_menu_search"
|
||||||
|
android:alpha="0.6"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etSearchPet"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:hint="Search pets..."
|
||||||
|
android:inputType="text"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:textColor="@color/text_dark"
|
||||||
|
android:textColorHint="#99000000"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingEnd="8dp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginTop="8dp">
|
||||||
|
|
||||||
<Spinner
|
<Spinner
|
||||||
android:id="@+id/spinnerStatus"
|
android:id="@+id/spinnerStatus"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="44dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:background="@android:color/transparent"/>
|
android:background="@drawable/bg_spinner"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="8dp"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="8dp"
|
||||||
|
android:layout_height="0dp"/>
|
||||||
|
|
||||||
<Spinner
|
<Spinner
|
||||||
android:id="@+id/spinnerSpecies"
|
android:id="@+id/spinnerSpecies"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="44dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginStart="4dp"
|
android:background="@drawable/bg_spinner"
|
||||||
android:background="@android:color/transparent"/>
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="8dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<Spinner
|
<Spinner
|
||||||
android:id="@+id/spinnerStore"
|
android:id="@+id/spinnerStore"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="48dp"
|
android:layout_height="44dp"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="8dp"
|
||||||
android:background="@android:color/transparent"/>
|
android:background="@drawable/bg_spinner"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="8dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user