2015-03-20 3 views
19

Я использую android spinner и edittext из поддержки lib v21. Я хотел бы выровнять текст так же, как edittext, как показано на рисунке. Но заклинание deafult включает интервал или дополнение. Поэтому я хотел бы удалить его, чтобы выровнять текст слева. Пожалуйста, помогите, как удалить его.Удалите интервал или заполнение в android Spinner

enter image description here

ответ

1

Попробуйте это,

  1. Создание пользовательского макета (как вам нужно) для вращателя строки.

  2. раздуйте компоновку при установке адаптера данных на счетчик.

0

Вы можете настроить свой собственный Spinner через девять пластыря и указать отступы

10

В вашем SpinnerAdapter:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     view.setPadding(0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom()); 
     return view; 
} 
+0

работал в моем случае .. но, возможно, супер вид ненужно. Просто настройка «convertView.setPadding()» должна работать. –

+0

@Чан, какой адаптер вы используете здесь? –

+0

@VolodymyrKhodonovych SpinnerAdapter –

3

Попробуйте ниже код, чтобы сделать это. Изменение атрибута стиля в вашем вращателе макета элемента списка textViewStyle ниже

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/textViewStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="false" 
    android:textAlignment="inherit" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 
+0

не работает - 30.11.2017 – JohannaNoobie

2

Если вы используете пользовательский адаптер, попробуйте установить отступы в getView():

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    view.setPadding(0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom()); 
    return view; 
} 
1

макет TextView, который отображается в вашем Spinner идет от SpinnerAdapter, который предусматривает 2 метода:

  • getView(position, convertView, parent): возвращает View для сложенного состояния, вы можете изменить это, чтобы вернуть различные макеты для различных выбранного элемента
  • getDropdownView(position, convertView, parent): возвращение View для каждого ниспадающего элемента в расширенном состоянии (после нажатия кнопки Spinner, чтобы открыть всплывающее/диалог выбора)

В в вашем случае вы должны переопределить SpinnerAdapter.getView(position, convertView, parent) и раздуть макет с заполнением/интервалом по вашему выбору.

Например:

spinner.setAdapter(new MyAdapter()); 

MyAdapter.java

class MyAdapter implements SpinnerAdapter { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.spinner_item, parent, false); 
     } 
     // bind your data here 
     return convertView; 
    } 
    // other implementation 
} 

Рез/макет/spinner_item.xml

<!-- set padding margin whatever here --> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Вы можете также удобно использовать один из рамки SpinnerAdapter indirect subclasses (ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, ThemedSpinnerAdapter), просто убедитесь, что поставляете правильный макет, который будет использоваться методом getView().

1

Если лет не хотят связываться в Java код и он в стилях

Поиск для этого файла (Ctrl + Shift + O) abc_spinner_textfield_background_material.xml

и скопировать в свой проект. Удалите все вставки значений из корневого элемента и укажите файл в качестве фона вашего счетчика.

В моем случае это выглядит следующим образом (drawable/spinner_background.xml)

<inset xmlns:android="http://schemas.android.com/apk/res/android"> 
    <selector> 
     <item 
      android:state_checked="false" 
      android:state_pressed="false"> 
      <layer-list> 
       <item android:drawable="@drawable/abc_textfield_default_mtrl_alpha" /> 
       <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" /> 
      </layer-list> 
     </item> 
     <item> 
      <layer-list> 
       <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha" /> 
       <item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" /> 
      </layer-list> 
     </item> 
    </selector> 
</inset> 

и в моем styles.xml я использую это так

<style name="DxSpinner" parent="@style/Widget.AppCompat.Spinner.Underlined"> 
    <item name="android:background">@drawable/spinner_background</item> 
</style> 
2

Вы также можете удалить отступы блесны в XML

Нужно только установить дополнение на 0dp.

<Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:padding="0dp"  
     android:id="@+id/my_spinner"> 
0

Эта работа для меня

Spinner spn = (Spinner) findViewById(R.id.spn); 

spn.setPadding(0, spn.getPaddingTop(), spn.getPaddingRight(), spn.getPaddingBottom()); 
0

Я просто ударил этот вопрос, а также. Я смог решить его с корректировкой поля, а не отступом, поэтому настройте android: marginStart = "0dp" на элемент spinner.

0

Этот адаптер массива удаляет левую прокладку в Android Spinner.

Котлин версия:

open class NoPaddingArrayAdapter<T>(context: Context, layoutId: Int, items: List<T>?) : ArrayAdapter<T>(context, layoutId, items) { 

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? { 
     val view = super.getView(position, convertView, parent) 
     view.setPadding(0,view.paddingTop,view.paddingRight,view.paddingBottom) 
     return view 
    } 
}