1-) Android RMOS - SearchableSpinner aranabilir combobox kodları entegreli
kaynak : https://github.com/MdFarhanRaja/SearchableSpinner
kendi kaynağım : https://drive.google.com/open?id=1MGFyjzHa3HgYkh2hqSbvdncWM8lzMTtt
ÖNEMLİ YERLER aşağıdadır
2-) ArrayAdapterWithContainsFilter.java
package com.webpos.ramazan.rmos.rmossay.SpinnerDialog;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class ArrayAdapterWithContainsFilter<S> extends ArrayAdapter {
private List<MainActivity.cari> items = null;
private ArrayList<MainActivity.cari> arraylist;
public ArrayAdapterWithContainsFilter(Activity context, int items_view, ArrayList<MainActivity.cari> items) {
super(context,items_view,items);
this.items = items;
this.arraylist = new ArrayList<MainActivity.cari>();
this.arraylist.addAll(items);
}
@NonNull
@Override
public Filter getFilter() {
return super.getFilter();
}
// Filter Class
public void getContainsFilter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
items.clear();
if (charText.length() == 0) {
items.addAll(arraylist);
}
else
{
for (MainActivity.cari item : arraylist)
{
if (item.getAd().toLowerCase(Locale.getDefault()).contains(charText))
{
items.add(item);
}
}
}
notifyDataSetChanged();
}
}
3-) OnSpinerItemClick interface
package com.webpos.ramazan.rmos.rmossay.SpinnerDialog;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
public interface OnSpinerItemClick
{
public void onClick(MainActivity.cari item, int position);
}
4-) SpinnerDialog.java
package com.webpos.ramazan.rmos.rmossay.SpinnerDialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
import com.webpos.ramazan.rmos.rmossay.R;
import java.util.ArrayList;
public class SpinnerDialog {
ArrayList<MainActivity.cari> items;
Activity context;
String dTitle, closeTitle = "Close";
OnSpinerItemClick onSpinerItemClick;
AlertDialog alertDialog;
int pos;
int style;
boolean cancellable = false;
boolean showKeyboard = false;
boolean useContainsFilter = false;
int titleColor, searchIconColor, searchTextColor, itemColor, itemDividerColor, closeColor;
private void initColor(Context context) {
this.titleColor = context.getResources().getColor(R.color.colorBlack);
this.searchIconColor = context.getResources().getColor(R.color.colorBlack);
this.searchTextColor = context.getResources().getColor(R.color.colorBlack);
this.itemColor = context.getResources().getColor(R.color.colorBlack);
this.closeColor = context.getResources().getColor(R.color.colorBlack);
this.itemDividerColor = context.getResources().getColor(R.color.colorLightGray);
}
public SpinnerDialog(Activity activity, ArrayList<MainActivity.cari> items, String dialogTitle) {
this.items = items;
this.context = activity;
this.dTitle = dialogTitle;
initColor(context);
}
public SpinnerDialog(Activity activity, ArrayList<MainActivity.cari> items, String dialogTitle, String closeTitle) {
this.items = items;
this.context = activity;
this.dTitle = dialogTitle;
this.closeTitle = closeTitle;
initColor(context);
}
public SpinnerDialog(Activity activity, ArrayList<MainActivity.cari> items, String dialogTitle, int style) {
this.items = items;
this.context = activity;
this.dTitle = dialogTitle;
this.style = style;
initColor(context);
}
public SpinnerDialog(Activity activity, ArrayList<MainActivity.cari> items, String dialogTitle, int style, String closeTitle) {
this.items = items;
this.context = activity;
this.dTitle = dialogTitle;
this.style = style;
this.closeTitle = closeTitle;
initColor(context);
}
public void bindOnSpinerListener(OnSpinerItemClick onSpinerItemClick1) {
this.onSpinerItemClick = onSpinerItemClick1;
}
public void showSpinerDialog(ArrayList<MainActivity.cari> itemsT) {
items=new ArrayList<>(itemsT);
AlertDialog.Builder adb = new AlertDialog.Builder(context);
View v = context.getLayoutInflater().inflate(R.layout.dialog_layout, null);
TextView rippleViewClose = (TextView) v.findViewById(R.id.close);
TextView title = (TextView) v.findViewById(R.id.spinerTitle);
ImageView searchIcon = (ImageView) v.findViewById(R.id.searchIcon);
rippleViewClose.setText(closeTitle);
title.setText(dTitle);
final ListView listView = (ListView) v.findViewById(R.id.list);
ColorDrawable sage = new ColorDrawable(itemDividerColor);
listView.setDivider(sage);
listView.setDividerHeight(1);
final EditText searchBox = (EditText) v.findViewById(R.id.searchBox);
if (isShowKeyboard()) {
showKeyboard(searchBox);
}
title.setTextColor(titleColor);
searchBox.setTextColor(searchTextColor);
rippleViewClose.setTextColor(closeColor);
searchIcon.setColorFilter(searchIconColor);
// final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.items_view, items);
final ArrayAdapterWithContainsFilter<String> adapter = new ArrayAdapterWithContainsFilter<String>(context, R.layout.items_view, items) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text1 = view.findViewById(R.id.text1);
text1.setText(items.get(position).getAd());
text1.setTextColor(itemColor);
return view;
}
};
listView.setAdapter(adapter);
adb.setView(v);
alertDialog = adb.create();
alertDialog.getWindow().getAttributes().windowAnimations = style;//R.style.DialogAnimations_SmileWindow;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView t = (TextView) view.findViewById(R.id.text1);
for (int j = 0; j < items.size(); j++) {
String ad=items.get(j).getAd();
String txt=t.getText().toString();
if (txt.equalsIgnoreCase(ad)) { // Ben Yorum satırı yaptım
pos = j;
break;
}
}
// onSpinerItemClick.onClick(t.getText().toString(), pos);
onSpinerItemClick.onClick(items.get(pos), pos);
closeSpinerDialog();
}
});
searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (isUseContainsFilter()) {
adapter.getContainsFilter(searchBox.getText().toString());
} else {
adapter.getFilter().filter(searchBox.getText().toString());
}
}
});
rippleViewClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeSpinerDialog();
}
});
alertDialog.setCancelable(isCancellable());
alertDialog.setCanceledOnTouchOutside(isCancellable());
alertDialog.show();
}
public void closeSpinerDialog() {
hideKeyboard();
if (alertDialog != null) {
alertDialog.dismiss();
}
}
private void hideKeyboard() {
try {
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} catch (Exception e) {
}
}
private void showKeyboard(final EditText ettext) {
ettext.requestFocus();
ettext.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(ettext, 0);
}
}
, 200);
}
private boolean isCancellable() {
return cancellable;
}
public void setCancellable(boolean cancellable) {
this.cancellable = cancellable;
}
private boolean isShowKeyboard() {
return showKeyboard;
}
private boolean isUseContainsFilter() {
return useContainsFilter;
}
public void setShowKeyboard(boolean showKeyboard) {
this.showKeyboard = showKeyboard;
}
public void setUseContainsFilter(boolean useContainsFilter) {
this.useContainsFilter = useContainsFilter;
}
public void setTitleColor(int titleColor) {
this.titleColor = titleColor;
}
public void setSearchIconColor(int searchIconColor) {
this.searchIconColor = searchIconColor;
}
public void setSearchTextColor(int searchTextColor) {
this.searchTextColor = searchTextColor;
}
public void setItemColor(int itemColor) {
this.itemColor = itemColor;
}
public void setCloseColor(int closeColor) {
this.closeColor = closeColor;
}
public void setItemDividerColor(int itemDividerColor) {
this.itemDividerColor = itemDividerColor;
}
}
5-) MainActivity.java
package com.webpos.ramazan.rmos.rmossay;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.codetroopers.betterpickers.OnDialogDismissListener;
import com.codetroopers.betterpickers.calendardatepicker.CalendarDatePickerDialogFragment;
import com.codetroopers.betterpickers.calendardatepicker.MonthAdapter;
import com.webpos.ramazan.rmos.rmossay.SpinnerDialog.OnSpinerItemClick;
import com.webpos.ramazan.rmos.rmossay.SpinnerDialog.SpinnerDialog;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity {
Button btnTarih, btnCari;
public static boolean yes = false;
Calendar c;
public static String sayimGirisTar = "";
ArrayList<cari> items = new ArrayList<>();
ArrayList<cari> itemsCopy = new ArrayList<>();
SpinnerDialog spinnerDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTarih = findViewById(R.id.btnTarih);
btnCari = findViewById(R.id.btnCari);
cariEkle();
ShowDialog();
}
public void cariEkle() {
items.clear();
items.add(new cari("1", "Metro"));
items.add(new cari("2", "Delhi"));
items.add(new cari("3", "Bengaluru"));
items.add(new cari("4", "Hyderabad"));
items.add(new cari("5", "Ahmedabad"));
items.add(new cari("6", "Chennai"));
items.add(new cari("7", "Kolkata"));
items.add(new cari("8", "Surat"));
items.add(new cari("9", "Pune"));
items.add(new cari("10", "Jaipur"));
items.add(new cari("11", "Lucknow"));
items.add(new cari("12", "Kanpur"));
itemsCopy = new ArrayList<>(items);
}
public class cari {
String ad, id;
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
cari(String id, String ad) {
this.id = id;
this.ad = ad;
}
}
public void ShowDialog() {
//spinnerDialog = new SpinnerDialog(MainActivity.this, items, "Cari Seçiniz", "İptal");// With No Animation
spinnerDialog = new SpinnerDialog(MainActivity.this, items, "Cari Seçiniz", R.style.DialogAnimations_SmileWindow, "İptal");// With Animation
spinnerDialog.setCancellable(true); // for cancellable
spinnerDialog.setShowKeyboard(true);// for open keyboard by default
spinnerDialog.setUseContainsFilter(true);
spinnerDialog.bindOnSpinerListener(new OnSpinerItemClick() {
@Override
public void onClick(cari item, int position) {
btnCari.setText(item.getAd());
Toast.makeText(MainActivity.this, item.getId() + " " + item.getAd() + " " + position + "", Toast.LENGTH_SHORT).show();
}
});
btnCari.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
spinnerDialog.showSpinerDialog(itemsCopy);
}
});
}
}
5-) res-> anim -> slide_in_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromYDelta="100%p"/>
6-) res-> anim -> slide_out_top.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:toYDelta="100%p" />
7-) items_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/text1"
android:padding="13dp"
android:textSize="16sp"
android:gravity="center|left">
</TextView>
8-) dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:id="@+id/mainView"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp"
android:orientation="vertical">
<TextView
android:id="@+id/spinerTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select or Search Items"
android:textSize="17sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|left"
android:orientation="horizontal">
<ImageView
android:id="@+id/searchIcon"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/ic_search_black_36dp" />
<EditText
android:id="@+id/searchBox"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="5dp"
android:background="#ffffff"
android:inputType="text" />
</LinearLayout>
<View
android:id="@+id/viewLine"
android:layout_width="wrap_content"
android:layout_height="0.1dp"
android:background="#d1d1d1" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="300dp"
android:divider="#d1d1d1"
android:dividerHeight="0.1dp"/>
<TextView
android:clickable="true"
android:padding="5dp"
android:layout_gravity="right"
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Close" />
</LinearLayout>
</LinearLayout>
9-) colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<!--<color name="colorAccent">#D81B60</color>-->
<color name="colorDarkGray">#949494</color>
<color name="colorGray">#C9C9C9</color>
<color name="colorLightGray">#E9E7E7</color>
<color name="colorBlack">#000000</color>
<color name="colorWhite">#FFFFFF</color>
</resources>
10-) styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="DialogAnimations" />
<style name="DialogAnimations.SmileWindow">
<item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
<item name="android:windowExitAnimation">@anim/slide_out_top</item>
</style>
</resources>