Android

Is it possibile to set hint Spinner in Android [duplicate]

Возможно ли установить счетчик подсказок в Android

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

Спасибо!

Переведено автоматически
Ответ 1

Вот решение, которое, вероятно, немного проще, чем код Рави Вьяса (спасибо за вдохновение!):

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item) {

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

View v = super.getView(position, convertView, parent);
if (position == getCount()) {
((TextView)v.findViewById(android.R.id.text1)).setText("");
((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
}

return v;
}

@Override
public int getCount() {
return super.getCount()-1; // you dont display last item. It is used as hint.
}

};

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("Item 1");
adapter.add("Item 2");
adapter.add("Hint to be displayed");

spinner.setAdapter(adapter);
spinner.setSelection(adapter.getCount()); //display hint
Ответ 2

Вы можете настроить свой собственный адаптер счетчика и переопределить метод getView, чтобы показывать подсказку вместо элемента . Я создал пример проекта на github, ознакомьтесь с ним здесь

Ответ 3

Еще более простой способ, чем настройка собственного адаптера счетчика, - это просто использовать кнопку и оформить ее как объект счетчика с помощью

android:background="@android:drawable/btn_dropdown"

Затем настройте событие onClick кнопки, чтобы открыть диалоговое окно выбора одного элемента. Затем вы можете делать все, что хотите, с текстом кнопки.

Какое-то время я предпочитал использовать этот способ. Надеюсь, это кому-то поможет.

РЕДАКТИРОВАТЬ: Недавно я снова поиграл с этим (и некоторое время назад кто-то попросил меня опубликовать пример). Эта стратегия будет выглядеть немного иначе, если вы используете тему Holo. Однако, если вы используете другие темы, такие как Theme.Black, это будет выглядеть идентично.

Чтобы продемонстрировать это, я создал простое приложение, в котором есть как обычный счетчик, так и мой пользовательский счетчик кнопок. Я разместил это в репозитории GitHub, но вот как выглядит это действие:

package com.stevebergamini.spinnerbutton;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Spinner;

public class MainActivity extends Activity {

Spinner spinner1;
Button button1;
AlertDialog ad;
String[] countries;

int selected = -1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

spinner1 = (Spinner) findViewById(R.id.spinner1);
button1 = (Button) findViewById(R.id.button1);

countries = getResources().getStringArray(R.array.country_names);

// You can also use an adapter for the allert dialog if you'd like
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countries);

ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected,
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
button1.setText(countries[which]);
selected = which;
ad.dismiss();

}}).setTitle(R.string.select_country).create();


button1.setOnClickListener( new OnClickListener(){

@Override
public void onClick(View v) {
ad.getListView().setSelection(selected);
ad.show();
}});

}
}
java android