-1

I have spinner on layout. Spinner has arrow. When spinner close arrow show from right to left.

enter image description here

When I open spinner and show dropdownview, I want rotate arrow. enter image description here

It is necessary to change the direction of the arrows, depending on the state spinner How can I do it? Thanks

aleksey080
  • 187
  • 4
  • 13
  • 2
    Possible duplicate of [Flip arrow on android spinner in toolbar](http://stackoverflow.com/questions/34862888/flip-arrow-on-android-spinner-in-toolbar) – Devendra Singh May 12 '16 at 09:05
  • Please include the relevant code as per [How to create a Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve) – MikeT May 12 '16 at 09:08

2 Answers2

2

I know it's too late but finally, I found a solution without extending the Spinner.

Just create a selector drawable like given below and set it as the background of spinner like android:background="@drawable/bg_spinner"

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true">
        <layer-list>
            <item android:drawable="@drawable/ic_up_arrow" android:gravity="center_vertical|right" android:right="5dp" />
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item android:drawable="@drawable/ic_down_arrow" android:gravity="center_vertical|right" android:right="5dp" />
        </layer-list>
    </item>
</selector>

And a Kotlin Extention function as...

fun AppCompatSpinner.setSpinnerFocusable() {
    isFocusableInTouchMode = true

    onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus ->
        if (hasFocus) {
            if (windowToken != null) {
                performClick()

                viewTreeObserver?.addOnWindowFocusChangeListener(object :
                    ViewTreeObserver.OnWindowFocusChangeListener {
                    override fun onWindowFocusChanged(hasFocus: Boolean) {
                        if (hasFocus) {
                            clearFocus()
                            viewTreeObserver?.removeOnWindowFocusChangeListener(this)
                        }
                    }
                })
            }
        }
    }
}

and from your activity/fragment call the extension method like spUser.setSpinnerFocusable()

That's it, no need to extend the Spinner class or use any library.

RBK
  • 2,481
  • 2
  • 30
  • 52
0

Change background of Layout in Adapter. Refer this code:

public class adapterActivity extends ArrayAdapter<DTO_MCode> {

    public adapterActivity(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        // TODO Auto-generated constructor stub
    }

    // Note: for combobox
    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        // TODO Auto-generated method stub
        return getViewChung(position, convertView, parent, true);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        return getViewChung(position, convertView, parent, false);
    }

    public View getViewChung(int position, View convertView,
            ViewGroup parent, boolean drop) {
        // TODO Auto-generated method stub
        View v = convertView;
        ViewWraper mwp;

        if (v == null) {
            LayoutInflater l = getLayoutInflater();
            v = l.inflate(R.layout.layoutcomboxe, null);
            mwp = new ViewWraper(v);
            v.setTag(mwp);
        } else {

            mwp = (ViewWraper) convertView.getTag();
        }
        LinearLayout layout = mwp.getLayoutrow();
        if (drop) {
            layout.setBackgroundResource(R.drawable.down);
        } else {
            layout.setBackgroundResource(R.drawable.up);
        }

        return v;
    }
}
D T
  • 3,522
  • 7
  • 45
  • 89