Android получит все страны на счетчике массива

Я искал много, но материал, который я нашел, немного смутился.

Мне нужно получить список стран Android и установить по умолчанию пользовательский язык.

Например: Я регистрирую учетную запись пользователя, и мне нужно вставить страну, в которой spinner покажет все страны, но по умолчанию появится моя стандартная локаль.

Сейчас у меня есть:

private Spinner spCountry;
private String array_spinner[];

...

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

array_spinner = new String[1];
array_spinner[0] = "Portugal";

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, array_spinner);
spCountry.setAdapter(adapter);

Спасибо всем за помощь!

Ответ 1

Как и для меня, я повторяю доступные локали и добавляю каждый элемент в список массива. И, конечно, я должен игнорировать дубликаты и пустые строки. Вот мой код:

Locale[] locale = Locale.getAvailableLocales();
ArrayList<String> countries = new ArrayList<String>();
String country;
for( Locale loc : locale ){
    country = loc.getDisplayCountry();
    if( country.length() > 0 && !countries.contains(country) ){
        countries.add( country );
    }
}
Collections.sort(countries, String.CASE_INSENSITIVE_ORDER);

Spinner citizenship = (Spinner)findViewById(R.id.input_citizenship);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, countries);
citizenship.setAdapter(adapter);

Ответ 2

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

private static final String DEFAULT_LOCAL = "Portugal";

Затем используйте его для выбора по умолчанию следующим образом.

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, array_spinner);
spCountry.setAdapter(adapter);
spCountry.setSelection(adapter.getPosition(DEFAULT_LOCAL));

ВЫВОД:

enter image description here

UPDATE: Создайте arrays.xml в res/values

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="country_arrays">
        <item>Malaysia</item>
        <item>United States</item>
        <item>Indonesia</item>
        <item>France</item>
        <item>Italy</item>
        <item>Singapore</item>
        <item>New Zealand</item>
        <item>India</item>
        <item>Portugal</item>
    </string-array>

</resources>

Затем используйте следующую команду в activity, чтобы получить все страны.

array_spinner = getResources().getStringArray(R.array.country_arrays);

Ответ 3

Полезный и настраиваемый выбор страны для ваших нужд.

Gradle

repositories {
    maven { url "https://jitpack.io" }
}

compile 'com.github.ekimual:country-picker-x:1.0.0'

Пример использования:

/* Declare */
CountryPickerDialog countryPicker;

/* Name of your Custom JSON list */
int resourceId = getResources().getIdentifier("country_avail", "raw", getApplicationContext().getPackageName());

countryPicker = new CountryPickerDialog(MainActivity.this, new  CountryPickerCallbacks() {
      @Override
      public void onCountrySelected(Country country, int flagResId) {
            /* Get Country Name: country.getCountryName(context); */
            /* Call countryPicker.dismiss(); to prevent memory leaks */
      }

      /* Set to false if you want to disable Dial Code in the results and true if you want to show it 
         Set to zero if you don't have a custom JSON list of countries in your raw file otherwise use 
         resourceId for your customly available countries */
  }, false, 0);

countryPicker.show();

Ссылка https://android-arsenal.com/details/1/4390

Ответ 4

Почему бы не сделать это так? Просто получайте страны в списке, сортируя его и вставляя.

String[] locales = Locale.getISOCountries();
List<String> countries = new ArrayList<>();
countries.add("**Select Country**");

for (String countryCode : locales) {

        Locale obj = new Locale("", countryCode);

        countries.add(obj.getDisplayCountry());

}
Collections.sort(countries);
countrySpinner.setItems(countries);