@TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_spinner, container, false); Spinner spn_label = (Spinner)v.findViewById(R.id.spinner_label); Spinner spn_no_arrow = (Spinner)v.findViewById(R.id.spinner_no_arrow); String[] items = new String[20]; for(int i = 0; i < items.length; i++) items[i] = "Item " + String.valueOf(i + 1); ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), R.layout.row_spn, items); adapter.setDropDownViewResource(R.layout.row_spn_dropdown); spn_label.setAdapter(adapter); spn_no_arrow.setAdapter(adapter); return v; }
private void onDataChanged(){ if(mSelectedPosition == INVALID_POSITION) setSelection(0); else if(mSelectedPosition < mAdapter.getCount()) onDataInvalidated(); else setSelection(mAdapter.getCount() - 1); }
@Override protected void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { mLabelEnable = false; mDropDownWidth = LayoutParams.WRAP_CONTENT; mArrowAnimSwitchMode = false; mGravity = Gravity.CENTER; mDisableChildrenWhenDisabled = false; mSelectedPosition = INVALID_POSITION; mIsRtl = false; setWillNotDraw(false); mPopup = new DropdownPopup(context, attrs, defStyleAttr, defStyleRes); mPopup.setModal(true); if(isInEditMode()) applyStyle(R.style.Material_Widget_Spinner); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showPopup(); } }); super.init(context, attrs, defStyleAttr, defStyleRes); }
/** * @return The selected item's view. */ public View getSelectedView() { View v = getChildAt(getChildCount() - 1); return v == mLabelView ? null : v; }
removeAllViews(); mLabelEnable = a.getBoolean(attr, false); else if(attr == R.styleable.Spinner_spn_labelPadding) getLabelView().setPadding(0, 0, 0, a.getDimensionPixelSize(attr, 0)); else if (attr == R.styleable.Spinner_spn_labelTextSize) labelTextSize = a.getDimensionPixelSize(attr, 0); labelTextColor = a.getColorStateList(attr); else if(attr == R.styleable.Spinner_spn_labelTextAppearance) getLabelView().setTextAppearance(context, a.getResourceId(attr, 0)); else if(attr == R.styleable.Spinner_spn_labelEllipsize){ int labelEllipsize = a.getInteger(attr, 0); switch (labelEllipsize) { case 1: getLabelView().setEllipsize(TextUtils.TruncateAt.START); break; case 2: getLabelView().setEllipsize(TextUtils.TruncateAt.MIDDLE); break; case 3: getLabelView().setEllipsize(TextUtils.TruncateAt.END); break; case 4: getLabelView().setEllipsize(TextUtils.TruncateAt.MARQUEE); break; default: getLabelView().setEllipsize(TextUtils.TruncateAt.END); break;
int heightSize = MeasureSpec.getSize(heightMeasureSpec); int paddingHorizontal = getPaddingLeft() + getPaddingRight() + getArrowDrawableWidth(); int paddingVertical = getPaddingTop() + getPaddingBottom() + getDividerDrawableHeight(); int height = 0; View v = getSelectedView(); if(v != null){ ViewGroup.LayoutParams params = v.getLayoutParams(); int ws = getSpec(widthSize - paddingHorizontal, params.width); int hs = getSpec(heightSize - paddingVertical - mLabelView.getMeasuredHeight(), params.height); setMeasuredDimension(width, height);
int w = r - l; int h = b - t; int arrowWidth = getArrowDrawableWidth(); int top = getPaddingTop() + (mLabelView == null ? 0 : mLabelView.getMeasuredHeight()); int bottom = h - getDividerDrawableHeight() - getPaddingBottom(); if(mIsRtl) mArrowDrawable.setBounds(getPaddingLeft(), top, getPaddingLeft() + arrowWidth, bottom); else mArrowDrawable.setBounds(getWidth() - getPaddingRight() - arrowWidth, top, getWidth() - getPaddingRight(), bottom); mDividerDrawable.setBounds(getPaddingLeft(), h - mDividerHeight - getPaddingBottom(), w - getPaddingRight(), h - getPaddingBottom()); int childLeft = mIsRtl ? (getPaddingLeft() + arrowWidth) : getPaddingLeft(); int childRight = mIsRtl ? (w - getPaddingRight()) : (w - getPaddingRight() - arrowWidth); int childTop = getPaddingTop(); int childBottom = h - getPaddingBottom(); View v = getSelectedView(); if(v != null){ int x, y;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.row_spn, items1); adapter.setDropDownViewResource(R.layout.row_spn_dropdown); spinner_viewmodel5.setAdapter(adapter); spinner_viewmodel5.setSelection(selectedItem); spinner_viewmodel5.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.row_spn, items2); adapter.setDropDownViewResource(R.layout.row_spn_dropdown); spinner_viewmodel5.setAdapter(adapter); spinner_viewmodel5.setSelection(selectedItem); spinner_viewmodel5.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.row_spn, items3); adapter.setDropDownViewResource(R.layout.row_spn_dropdown); spinner_viewmodel5.setAdapter(adapter); spinner_viewmodel5.setSelection(selectedItem); spinner_viewmodel5.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.row_spn, items3); adapter.setDropDownViewResource(R.layout.row_spn_dropdown); spinner_viewmodel5.setAdapter(adapter); spinner_viewmodel5.setSelection(selectedItem);
mModeSpinner.setAdapter(mModeAdapter); mModeSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { @Override public void onItemSelected(Spinner parent, View view, int position, long id) { mEndSpinner.setAdapter(mEndAdapter); mEndSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { @Override public void onItemSelected(Spinner parent, View view, int position, long id) {
if(mModeSpinner.getSelectedItemPosition() != mRecurring.getRepeatMode()) mModeSpinner.setSelection(mRecurring.getRepeatMode()); else onModeSelected(mRecurring.getRepeatMode()); mEndDateButton.setTag(date); if(mEndSpinner.getSelectedItemPosition() != mRecurring.getEndMode()) mEndSpinner.setSelection(mRecurring.getEndMode()); else onEndSelected(mRecurring.getEndMode());
@Override public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); setSelection(ss.position); if (ss.showDropdown) { ViewTreeObserver vto = getViewTreeObserver(); if (vto != null) { final ViewTreeObserver.OnGlobalLayoutListener listener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { showPopup(); final ViewTreeObserver vto = getViewTreeObserver(); if (vto != null) vto.removeGlobalOnLayoutListener(this); } }; vto.addOnGlobalLayoutListener(listener); } } }
public boolean performItemClick(View view, int position, long id) { if (mOnItemClickListener != null) { // playSoundEffect(SoundEffectConstants.CLICK); // if (view != null) // view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); if(mOnItemClickListener.onItemClick(this, view, position, id)) setSelection(position); return true; } else setSelection(position); return false; }
private void onDataInvalidated(){ if(mAdapter == null) return; if(mLabelView == null) removeAllViews(); else for(int i = getChildCount() - 1; i > 0; i--) removeViewAt(i); int type = mAdapter.getItemViewType(mSelectedPosition); View v = mAdapter.getView(mSelectedPosition, mRecycler.get(type), this); v.setFocusable(false); v.setClickable(false); if(v.getParent() != null) ((ViewGroup)v.getParent()).removeView(v); super.addView(v); mRecycler.put(type, v); }
int start = Math.max(0, getSelectedItemPosition()); final int end = Math.min(adapter.getCount(), start + MAX_ITEMS_MEASURED); final int count = end - start;
@Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.position = getSelectedItemPosition(); ss.showDropdown = mPopup != null && mPopup.isShowing(); return ss; }
@Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (mDisableChildrenWhenDisabled) { final int count = getChildCount(); for (int i = 0; i < count; i++) getChildAt(i).setEnabled(enabled); } }
private void showPopup(){ if (!mPopup.isShowing()){ mPopup.show(); final ListView lv = mPopup.getListView(); if(lv != null){ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lv.setSelection(getSelectedItemPosition()); if(mArrowDrawable != null && mArrowAnimSwitchMode) lv.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { lv.getViewTreeObserver().removeOnPreDrawListener(this); mArrowDrawable.setMode(ArrowDrawable.MODE_UP, true); return true; } }); } } }