Android простой элемент spinner

этот вопрос относится к этому: android.R.simple_spinner_item

Поскольку я не могу комментировать из-за низкой репутации, у меня есть дополнительный вопрос:

Если я скопирую и вставлю макет android.R.simple_spinner_item, я получаю сообщение об ошибке

android:layout_height="?android:attr/dropdownListPreferredItemHeight"

say "error: Error: Attribute не является общедоступным. (at 'layout_height' со значением '? android: attr/dropdownListPreferredItemHeight')."

Я просто добавил android:gravity="right", чтобы выравнивание spinner_item с правой стороны.

Как я могу решить эту ошибку?

Ответы

Ответ 1

Кажется, для меня работает, если вы не префикс его андроид, например:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@android:id/text1"
             style="?android:attr/spinnerDropDownItemStyle"
             android:singleLine="true"
             android:layout_width="match_parent"
             android:layout_height="?attr/dropdownListPreferredItemHeight"
             android:ellipsize="marquee"/>

Ответ 2

тогда вам придется его проектировать.

Макет/my_spinner_textview.xml

 <?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/spinnerItemStyle"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:gravity="right" />

и вот как я установил адаптер

 private String[] state= {"Andra Pradesh","Arunachal Pradesh","Assam","Bihar","Haryana","Himachal Pradesh", "Jammu and Kashmir", "Jharkhand","Karnataka", "Kerala","Tamil Nadu"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,  R.layout.my_spinner_textview, state);
        adapter_state.setDropDownViewResource(R.layout.my_spinner_textview);
        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        spinner.setAdapter(adapter_state);

    }

Ответ 3

Вы можете использовать ресурсы android (темы или атрибуты), которые были определены как общедоступные системой.

Поскольку attr "?android:attr/dropdownListPreferredItemHeight" не является общедоступным, вы не можете его использовать.

Вместо этого вы можете использовать

android:layout_height="wrap_content"

для макета элемента Spinner.

Другим обходным решением может быть копирование ресурсов из SDK в ваш проект, а затем их использование в вашем проекте.

Ответ 4

android:layout_width="match_parent"
android:layout_height="48dp"

Создайте собственный макет с этими атрибутами. Возможно, вам захочется обсудить его позже.

Ответ 5

Этот ресурс, если он частный, поэтому может использовать только библиотеку, из которой этот атрибут. Поэтому вам нужно получить размер этого атрибута и создать его в своем приложении. Из исходного кода: https://android.googlesource.com/platform/frameworks/support/+/50fe5ec/appcompat/res/values/themes.xml

мы можем видеть в строках 50 и/или 84 атрибут. Поэтому в файле dimens.xml вы можете написать:

<dimen name="dropdownListPreferredItemHeight">64dip</dimen>

а затем ссылайтесь на него, как на обычный ресурс:

android:layout_height="@dimen/dropdownListPreferredItemHeight"