2017-05-15 2 views
1

Ich habe ein Formular mit TextInputLayout + TextInputEditText und Spinner. Ich möchte den Spinner-Hülltext, aber große Elemente im Dropdown-Menü. Das Problem besteht darin, dass die Höhe des Drehfelds von der Höhe der Dropdown-Elemente abhängt (simple_spinner_dropdown_item). Ich setze style = "@ style/Base.Widget.AppCompat.Spinner.Underlined", um Zeile unter Spinner hinzufügen.Spinner wie editiertext

Irgendeine Lösung?

Beispiel: Residencial Feld enter image description here

+0

Bitte geben Sie eine [MCVE]. –

+0

@ Code-Apprentice hat ein Beispiel hochgeladen – Yamila

+0

was ist mit deinen Spinner Items? sind ihre Werte statisch? – FAT

Antwort

3

Spinner wie EditText

Wenn Sie EditText Spinner wollen, dann ist es wie AutoCompleteTextView .Sie können Gewohnheit Ihre AppCompatAutoCompleteTextView wie folgt aus:

public class AutoCompleteDropDown extends AppCompatAutoCompleteTextView { 
    // implements AdapterView.OnItemClickListener 
    private static final int MAX_CLICK_DURATION = 200; 
    private long startClickTime; 
    private boolean isPopup; 
    private int mPosition = ListView.INVALID_POSITION; 

    public AutoCompleteDropDown(Context context) { 
     super(context); 
//  setOnItemClickListener(this); 
    } 

    public AutoCompleteDropDown(Context arg0, AttributeSet arg1) { 
     super(arg0, arg1); 
//  setOnItemClickListener(this); 
    } 

    public AutoCompleteDropDown(Context arg0, AttributeSet arg1, int arg2) { 
     super(arg0, arg1, arg2); 
//  setOnItemClickListener(this); 
    } 

    @Override 
    public boolean enoughToFilter() { 
     return true; 
    } 

    @Override 
    protected void onFocusChanged(boolean focused, int direction, 
            Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     if (focused) { 
      performFiltering("", 0); 
      InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(getWindowToken(), 0); 
      setKeyListener(null); 
      dismissDropDown(); 
     } else { 
      isPopup = false; 
     } 
    } 


    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_UP: { 
       if (isPopup) { 
        dismissDropDown(); 
       } else { 
        requestFocus(); 
        showDropDown(); 
       } 
       break; 
      } 
     } 

     return super.onTouchEvent(event); 
    } 

    @Override 
    public void showDropDown() { 
     super.showDropDown(); 
     isPopup = true; 
    } 

    @Override 
    public void dismissDropDown() { 
     super.dismissDropDown(); 
     isPopup = false; 
    } 



    @Override 
    public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) { 
     Drawable dropdownIcon = ContextCompat.getDrawable(getContext(), R.drawable.ic_expand_more_black_18dp); 
     if (dropdownIcon != null) { 
      right = dropdownIcon; 
      right.mutate().setAlpha(66); 
     } 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      super.setCompoundDrawablesRelativeWithIntrinsicBounds(left, top, right, bottom); 
     } else { 
      super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); 
     } 

    } 



    public int getPosition() { 
     return mPosition; 
    } 
} 

Und ic_expand_more_black_18dp.png ist ein Bild wie folgt aus:

Layout:

<android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:textColorHint="@color/gray_text_hint" 
     app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout.Dark"> 

     <yourpackage.AutoCompleteDropDown 
      android:id="@+id/edtBloodType" 
      style="@style/edt_dark" 
      android:hint="Blood Type" 
      android:inputType="textNoSuggestions" /> 
    </android.support.design.widget.TextInputLayout> 

Ergebnis (Sie Adapter für Ihren AutoCompleteTextView einstellen)

enter image description here

+0

Zu kompliziert: S – Yamila

+0

Ich suchte viel, um Spinner als edittext zu tun. Wenn Sie einen anderen einfachen Weg haben. Bitte teilen Sie es. –

+0

Überprüfen Sie meine Lösung oben http://stackoverflow.com/a/43980904/2516829 – Yamila

-1

ANTWORT: Ich war gerade Einstellung Adapter-Layout (beide Layouts ausprobiert), aber es gibt ein bestimmtes Dropdown-Layout.

ArrayAdapter<String> typeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.spinner_item, types); 
typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

spinner_item ist ein benutzerdefiniertes Layout, die linke Polsterung entfernt:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
style="?android:attr/spinnerItemStyle" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:ellipsize="marquee" 
android:paddingEnd="0dp" 
android:paddingLeft="0dp" 
android:paddingStart="0dp" 
android:singleLine="true" 
android:textAlignment="inherit" /> 

auch, fügen Sie diesen Stil Spinner:

style="@style/Widget.AppCompat.Spinner.Underlined" 

Und

0

Hier eine Abhilfe:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.custom_spinner_item, values); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

Hier wird das Layout android.R.layout.simple_spinner_dropdown_item für dropdown Element verwendet und benutzerdefinierte Layout custom_spinner_item wird für Spinner view verwendet, um nur TextView zu zeigen.

custom_spinner_item.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:maxLines="1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" /> 

FYI, du TextView nach Ihren Bedürfnissen anpassen können.

Hoffe, dies wird helfen ~

Verwandte Themen