установить вид текста выравнивания по центру в спиннер в Android - PullRequest
34 голосов
/ 22 сентября 2011

просмотр текста в центре вращающегося элемента при выборе из выпадающего списка

Я хочу выровнять видтекст счетчика в центр.Я гуглю, но ничего не нашел, кто-нибудь знает об этом?любая помощь или предложение приветствуются

Ответы [ 8 ]

57 голосов
/ 22 сентября 2011

Создайте адаптер для вашего счетчика, как это,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.my_spinner_style,array_of_values) {

    public View getView(int position, View convertView,ViewGroup parent) {

        View v = super.getView(position, convertView, parent);

        ((TextView) v).setTextSize(16);

        return v;

    }

    public View getDropDownView(int position, View convertView,ViewGroup parent) {

        View v = super.getDropDownView(position, convertView,parent);

        ((TextView) v).setGravity(Gravity.CENTER);

        return v;

    }

};

Теперь ваш макет R.layout.my_spinner_style ,

<?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:singleLine="true"
android:textColor="#ffffff"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee" />

Теперь установите этот адаптер на спиннер,

spinner.setAdapter(adapter);
36 голосов
/ 22 сентября 2011

Вам нужно установить свой собственный макет для элемента счетчика.

SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.spinner_item, new String[]{"A", "B", "C"});
spriner.setAdapter(adap);

Где R.layout.spinner_item - это макет с содержанием:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent"
    android:layout_width="fill_parent" 
    android:gravity="center" 
    android:textColor="#000000" 
    android:text="Sample Text" 
    android:paddingBottom="5dp" 
    android:paddingTop="5dp"></TextView>
12 голосов
/ 12 декабря 2016

Это очень просто, просто создайте файл xml с именем spinner_item.xml с содержимым как

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#111111"
android:padding="10dp"
android:textAlignment="center"
/>

Теперь в вашем классе java, несмотря на добавление ресурса просмотра Android по умолчанию, добавьте свой пользовательский ресурс просмотра как

ArrayAdapter<String> adapter= new ArrayAdapter<String>(context, R.layout.spinner_item, myList);
 adapter.setDropDownViewResource(R.layout.spinner_item);

Строка textAlignment поможет.

5 голосов
/ 08 апреля 2018

Настройка textAlignment to center поместит текст в центр.

android: textAlignment = "center"

        <android.support.v7.widget.AppCompatSpinner
            android:id="@+id/spinner_areas"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:visibility="visible"
            android:gravity="center"
            android:textAlignment="center"/>
5 голосов
/ 26 января 2016

Это работает без изменений макета

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
               ((TextView) adapterView.getChildAt(0)).setGravity(Gravity.CENTER);
        }
 });
2 голосов
/ 09 июня 2014

Поздно к игре, но я хотел добавить это для будущих пользователей только потому, что нашел простое решение для моей проблемы. Это позволило мне центрировать простой текст без создания собственного макета. То, как я это сделал, использовало padding

<Spinner
    android:id="@+id/example_spinner"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="2dp"
    android:paddingBottom="2dp" />

Я успешно центрировал свой текст в моем счетчике, используя этот метод. Это, вероятно, будет работать только для простых случаев, но вы все равно захотите использовать пользовательский макет для более сложных случаев. Это просто для того, чтобы сохранить ваши XML-файлы и избежать необходимости использовать пользовательский макет только для центрирования простого счетчика.

0 голосов
/ 05 июля 2019

Добавьте эту строку в Spinner

android:textAlignment="center"

Voila!

0 голосов
/ 26 января 2014

Дайте мне полный ответ.Также важно освободить место в Spinner.

Неправильно:

<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Справа:

<Spinner
android:id="@+id/spinner"
android:layout_width="100dp"
android:layout_height="wrap_content"
/>
...