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"