roomorama / androidcountrypicker Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
In the strings_countries.xml I see a strange string.
How are country names coded?
Thanks.
I found some "errors" while iteration through the countries.
The The following countries could or maybe should be renamed:
Would it be a good idea to move the get Counrylist to the constructor so it happens in newinstance (the read from file?)
It could be used getResources().getString(android.R.string.search_go) so we don't have to localize that string.
Actually I'm learning Android and I don't know how to localize that without modifying your library (which is a bad practice, as I would lose any changes if I update the library from your repo), so I think using the SO strings would be nice in this case.
Hi there,
Do you know of a similar component but for iOS? I was just looking for inspiration.
Hi,
I made a point of being used and modified to support mobile phone country code.
strings_countries.xml
<string name="countries">eyJJTSI6IjQ0O0lzbGUgb2YgTWFuIiwiSFIiOiIzODU7Q3JvYXRpYSIsIkdXIjoiMjQ1O0d1aW5lYS1CaXNzYXUiLCJJTiI6IjkxO0luZGlhIiwiS0UiOiIyNTQ7S2VueWEiLCJMQSI6Ijg1NjtMYW9zIiwiSU8iOiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLCJIVCI6IjUwOTtIYWl0aSIsIkxCIjoiOTYxO0xlYmFub24iLCJHWSI6IjU5MjtHdXlhbmEiLCJLRyI6Ijk5NjtLeXJneXpzdGFuIiwiSFUiOiIzNjtIdW5nYXJ5IiwiTEMiOiJTYWludCBMdWNpYSIsIklRIjoiOTY0O0lyYXEiLCJLSCI6Ijg1NTtDYW1ib2RpYSIsIkpNIjoiSmFtYWljYSIsIklSIjoiOTg7SXJhbiIsIktJIjoiNjg2O0tpcmliYXRpIiwiSVMiOiJJY2VsYW5kIiwiTUEiOiIyMTI7TW9yb2NjbyIsIkpPIjoiOTYyO0pvcmRhbiIsIklUIjoiMzk7SXRhbHkiLCJKUCI6IjgxO0phcGFuIiwiTUMiOiIzNzc7TW9uYWNvIiwiS00iOiIyNjk7Q29tb3JvcyIsIk1EIjoiMzczO01vbGRvdmEiLCJMSSI6IjQyMztMaWVjaHRlbnN0ZWluIiwiS04iOiJTYWludCBLaXR0cyAmIE5ldmlzIiwiTUUiOiIzODI7TW9udGVuZWdybyIsIk5BIjoiMjY0O05hbWliaWEiLCJNRiI6IlNhaW50IE1hcnRpbiAoRnJlbmNoKSIsIkxLIjoiOTQ7U3JpIExhbmthIiwiS1AiOiI4NTA7Tm9ydGggS29yZWEiLCJNRyI6IjI2MTtNYWRhZ2FzY2FyIiwiTkMiOiI2ODc7TmV3IENhbGVkb25pYSIsIk1IIjoiNjkyO01hcnNoYWxsIElzbGFuZHMiLCJLUiI6IjgyO1NvdXRoIEtvcmVhIiwiTkUiOiIyMjc7TmlnZXIiLCJORiI6Ik5vcmZvbGsgSXNsYW5kIiwiTUsiOiIzODk7TWFjZWRvbmlhIiwiTkciOiIyMzQ7TmlnZXJpYSIsIk1MIjoiMjIzO01hbGkiLCJNTSI6Ijk1O015YW5tYXIgKEJ1cm1hKSIsIkxSIjoiMjMxO0xpYmVyaWEiLCJOSSI6IjUwNTtOaWNhcmFndWEiLCJLVyI6Ijk2NTtLdXdhaXQiLCJNTiI6Ijk3NjtNb25nb2xpYSIsIkxTIjoiMjY2O0xlc290aG8iLCJQQSI6IjUwNztQYW5hbWEiLCJNTyI6Ijg1MztNYWNhdSIsIkxUIjoiMzcwO0xpdGh1YW5pYSIsIktZIjoiQ2F5bWFuIElzbGFuZHMiLCJNUCI6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsIkxVIjoiMzUyO0x1eGVtYm91cmciLCJOTCI6IjMxO05ldGhlcmxhbmRzIiwiS1oiOiI3O0themFraHN0YW4iLCJNUSI6Ik1hcnRpbmlxdWUiLCJMViI6IkxhdHZpYSIsIk1SIjoiMjIyO01hdXJpdGFuaWEiLCJQRSI6IjUxO1BlcnUiLCJNUyI6Ik1vbnRzZXJyYXQiLCJRQSI6Ijk3NDtRYXRhciIsIk5PIjoiNDc7Tm9yd2F5IiwiUEYiOiI2ODk7VGFoaXRpIChGcmVuY2ggUG9saW5lc2lhKSIsIk1UIjoiMjU2O01hbHRhIiwiTFkiOiIyMTg7TGlieWEiLCJOUCI6Ijk3NztOZXBhbCIsIlBHIjoiNjc1O1BhcHVhIE5ldyBHdWluZWEiLCJNVSI6IjIzMDtNYXVyaXRpdXMiLCJQSCI6IjYzO1BoaWxpcHBpbmVzIiwiTVYiOiI5NjA7TWFsZGl2ZXMiLCJPTSI6Ijk2ODtPbWFuIiwiTlIiOiI2NzQ7TmF1cnUiLCJNVyI6IjI2NTtNYWxhd2kiLCJNWCI6IjUyO01leGljbyIsIlBLIjoiOTI7UGFraXN0YW4iLCJNWSI6IjYwO01hbGF5c2lhIiwiTlUiOiI2ODM7Tml1ZSIsIlBMIjoiNDg7UG9sYW5kIiwiTVoiOiIyNTg7TW96YW1iaXF1ZSIsIlBNIjoiNTA4O1NhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24iLCJQTiI6Ijg3MDtQaXRjYWlybiIsIlJFIjoiUmV1bmlvbiIsIlNBIjoiOTY2O1NhdWRpIEFyYWJpYSIsIlNCIjoiNjc3O1NvbG9tb24gSXNsYW5kcyIsIk5aIjoiNjQ7TmV3IFplYWxhbmQiLCJTQyI6IjI0ODtTZXljaGVsbGVzIiwiU0QiOiIyNDk7U3VkYW4iLCJQUiI6IjE7UHVlcnRvIFJpY28iLCJTRSI6IjQ2O1N3ZWRlbiIsIlBTIjoiUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZCIsIlBUIjoiMzUxO1BvcnR1Z2FsIiwiU0ciOiI2NTtTaW5nYXBvcmUiLCJUQyI6IlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsIlNIIjoiMjkwO1NhaW50IEhlbGVuYSIsIlREIjoiMjM1O0NoYWQiLCJTSSI6IjM4NjtTbG92ZW5pYSIsIlBXIjoiNjgwO1BhbGF1IiwiU0oiOiJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIElzbGFuZHMiLCJVQSI6IjM4MDtVa3JhaW5lIiwiUk8iOiI0MDtSb21hbmlhIiwiVEYiOiJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMiLCJTSyI6IjQyMTtTbG92YWsgUmVwdWJsaWMiLCJQWSI6IjU5NTtQYXJhZ3VheSIsIlRHIjoiMjI4O1RvZ28iLCJTTCI6IjIzMjtTaWVycmEgTGVvbmUiLCJUSCI6IjY2O1RoYWlsYW5kIiwiU00iOiIzNzg7U2FuIE1hcmlubyIsIlNOIjoiMjIxO1NlbmVnYWwiLCJSUyI6IjM4MTtTZXJiaWEgKFl1Z29zbGF2aWEpIiwiVEoiOiI5OTI7VGFqaWtpc3RhbiIsIlZBIjoiMzk7VmF0aWNhbiBDaXR5IiwiU08iOiIyNTI7U29tYWxpYSIsIlRLIjoiNjkwO1Rva2VsYXUiLCJVRyI6IjI1NjtVZ2FuZGEiLCJSVSI6Ijc7UnVzc2lhbiBGZWRlcmF0aW9uIiwiVEwiOiI2NzA7RWFzdCBUaW1vciIsIlZDIjoiU2FpbnQgVmluY2VudCAmIHRoZSBHcmVuYWRpbmVzIiwiVE0iOiI5OTM7VHVya21lbmlzdGFuIiwiU1IiOiI1OTc7U3VyaW5hbWUiLCJSVyI6IjI1MDtSd2FuZGEiLCJUTiI6IjIxNjtUdW5pc2lhIiwiVkUiOiI1ODtWZW5lenVlbGEiLCJUTyI6IjY3NjtUb25nYSIsIlNUIjoiMjM5O1NhbyBUb21lICYgUHJpbmNpcGUiLCJWRyI6IkJyaXRpc2ggVmlyZ2luIElzbGFuZHMiLCJTViI6IjUwMztFbCBTYWx2YWRvciIsIlVNIjoiVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzIiwiVFIiOiI5MDtUdXJrZXkiLCJWSSI6IlZpcmdpbiBJc2xhbmRzIChVUykiLCJXRiI6IjY4MTtXYWxsaXMgYW5kIEZ1dHVuYSIsIlRUIjoiVHJpbmlkYWQgJiBUb2JhZ28iLCJTWSI6Ijk2MztTeXJpYSIsIlNaIjoiMjY4O1N3YXppbGFuZCIsIlRWIjoiNjg4O1R1dmFsdSIsIlRXIjoiODg2O1RhaXdhbiIsIlZOIjoiODQ7VmlldCBOYW0iLCJVUyI6IjE7VW5pdGVkIFN0YXRlcyAoVVNBKSIsIlRaIjoiMjU1O1RhbnphbmlhIiwiWUUiOiI5Njc7WWVtZW4iLCJaQSI6IjI3O1NvdXRoIEFmcmljYSIsIlhLIjoiS29zb3ZvIiwiVVkiOiI1OTg7VXJ1Z3VheSIsIlZVIjoiNjc4O1ZhbnVhdHUiLCJVWiI6Ijk5ODtVemJla2lzdGFuIiwiV1MiOiI2ODU7U2Ftb2EiLCJaTSI6IjI2MDtaYW1iaWEiLCJBQyI6IkFzY2Vuc2lvbiBJc2xhbmQiLCJBRCI6IjM3NjtBbmRvcnJhIiwiWVQiOiIyNjI7TWF5b3R0ZSIsIkFFIjoiOTcxO1VuaXRlZCBBcmFiIEVtaXJhdGVzIiwiWVUiOiJTZXJiaWEgYW5kIE1vbnRlbmVncm8iLCJCQSI6IjM4NztCb3NuaWEgJiBIZXJ6ZWdvdmluYSIsIkFGIjoiOTM7QWZnaGFuaXN0YW4iLCJCQiI6IkJhcmJhZG9zIiwiQUciOiJBbnRpZ3VhICYgQmFyYnVkYSIsIkJEIjoiODgwO0JhbmdsYWRlc2giLCJBSSI6IkFuZ3VpbGxhIiwiQkUiOiIzMjtCZWxnaXVtIiwiQ0EiOiIxO0NhbmFkYSIsIkJGIjoiMjI2O0J1cmtpbmEgRmFzbyIsIkJHIjoiMzU5O0J1bGdhcmlhIiwiWlciOiIyNjM7WmltYmFid2UiLCJBTCI6IjM1NTtBbGJhbmlhIiwiQ0MiOiI2MTtDb2NvcyAoS2VlbGluZykgSXNsYW5kcyIsIkJIIjoiOTczO0JhaHJhaW4iLCJBTSI6IjM3NDtBcm1lbmlhIiwiQ0QiOiIyNDM7Q29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWMiLCJCSSI6IjI1NztCdXJ1bmRpIiwiQU4iOiI1OTk7TmV0aGVybGFuZHMgQW50aWxsZXMiLCJCSiI6IjIyOTtCZW5pbiIsIkFPIjoiMjQ0O0FuZ29sYSIsIkNGIjoiMjM2O0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsIkNHIjoiMjQyO0NvbmdvIiwiQVEiOiI2NzI7QW50YXJjdGljYSIsIkNIIjoiNDE7U3dpdHplcmxhbmQiLCJCTSI6IkJlcm11ZGEiLCJBUiI6IjU0O0FyZ2VudGluYSIsIkNJIjoiMjI1O0NvdGUgRCdJdm9pcmUgKEl2b3J5IENvYXN0KSIsIkJOIjoiNjczO0JydW5laSBEYXJ1c3NhbGFtIiwiREUiOiI0OTtHZXJtYW55IiwiQVMiOiJBbWVyaWNhbiBTYW1vYSIsIkJPIjoiNTkxO0JvbGl2aWEiLCJBVCI6IjQzO0F1c3RyaWEiLCJDSyI6IjY4MjtDb29rIElzbGFuZHMiLCJBVSI6IjYxO0F1c3RyYWxpYSIsIkNMIjoiNTY7Q2hpbGUiLCJFQyI6IjU5MztFY3VhZG9yIiwiQ00iOiIyMzc7Q2FtZXJvb24iLCJCUiI6IjU1O0JyYXppbCIsIkFXIjoiMjk3O0FydWJhIiwiQ04iOiI4NjtDaGluYSIsIkVFIjoiMzcyO0VzdG9uaWEiLCJCUyI6IkJhaGFtYXMiLCJESiI6IjI1MztEamlib3V0aSIsIkFYIjoiQWxhbmQgSXNsYW5kcyIsIkNPIjoiNTc7Q29sb21iaWEiLCJCVCI6Ijk3NTtCaHV0YW4iLCJESyI6IjQ1O0Rlbm1hcmsiLCJFRyI6IjIwO0VneXB0IiwiQVoiOiI5OTQ7QXplcmJhaWphbiIsIkVIIjoiV2VzdGVybiBTYWhhcmEiLCJCViI6IkJvdXZldCBJc2xhbmQiLCJETSI6IkRvbWluaWNhIiwiQ1IiOiI1MDY7Q29zdGEgUmljYSIsIkJXIjoiMjY3O0JvdHN3YW5hIiwiR0EiOiIyNDE7R2Fib24iLCJETyI6IkRvbWluaWNhbiBSZXB1YmxpYyIsIkJZIjoiMzc1O0JlbGFydXMiLCJHQiI6IjQ0O1VuaXRlZCBLaW5nZG9tIiwiQ1UiOiI1MztDdWJhIiwiQloiOiI1MDE7QmVsaXplIiwiQ1YiOiIyMzg7Q2FwZSBWZXJkZSIsIkdEIjoiR3JlbmFkYSIsIkZJIjoiMzU4O0ZpbmxhbmQiLCJHRSI6Ijk5NTtHZW9yZ2lhIiwiRkoiOiI2Nzk7RmlqaSIsIkNYIjoiNjE7Q2hyaXN0bWFzIElzbGFuZCIsIkdGIjoiRnJlbmNoIEd1aWFuYSIsIkZLIjoiNTAwO0ZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKSIsIkNZIjoiMzU3O0N5cHJ1cyIsIkdHIjoiR3Vlcm5zZXkiLCJDWiI6IjQyMDtDemVjaCBSZXB1YmxpYyIsIkdIIjoiMjMzO0doYW5hIiwiRk0iOiI2OTE7TWljcm9uZXNpYSIsIkVSIjoiMjkxO0VyaXRyZWEiLCJHSSI6IjM1MDtHaWJyYWx0YXIiLCJFUyI6IjM0O1NwYWluIiwiRk8iOiIyOTg7RmFyb2UgSXNsYW5kcyIsIkVUIjoiMjUxO0V0aGlvcGlhIiwiR0wiOiIyOTk7R3JlZW5sYW5kIiwiRFoiOiIyMTM7QWxnZXJpYSIsIkdNIjoiMjIwO0dhbWJpYSIsIklEIjoiNjI7SW5kb25lc2lhIiwiRlIiOiIzMztGcmFuY2UiLCJHTiI6IjIyNDtHdWluZWEiLCJJRSI6IjM1MztJcmVsYW5kIiwiSEsiOiI4NTI7SG9uZyBLb25nIiwiR1AiOiJHdWFkZWxvdXBlIiwiR1EiOiIyNDA7RXF1YXRvcmlhbCBHdWluZWEiLCJITSI6IkhlYXJkIGFuZCBNY0RvbmFsZCBJc2xhbmRzIiwiR1IiOiIzMDtHcmVlY2UiLCJITiI6IjUwNDtIb25kdXJhcyIsIkpFIjoiSmVyc2V5IiwiR1MiOiJTb3V0aCBHZW9yZ2lhIGFuZCBTb3V0aCBTYW5kd2ljaCIsIkZYIjoiRnJhbmNlLCBNZXRyb3BvbGl0YW4iLCJHVCI6IjUwMjtHdWF0ZW1hbGEiLCJHVSI6Ikd1YW0iLCJJTCI6Ijk3MjtJc3JhZWwifQ==</string>
Country.java
public String getName() {
String lpszName = name;
if (name != null && name.isEmpty() == false) {
String[] lpszNames = name.split(";");
if (lpszNames.length == 2) {
lpszName = lpszNames[1].trim();
}
}
return lpszName;
}
public String getCountryCode() {
String lpszName = "";
if (name != null && name.isEmpty() == false) {
String[] lpszNames = name.split(";");
if (lpszNames.length == 2) {
lpszName = lpszNames[0].trim();
}
}
return lpszName;
}
CountryPickerListener.java
public interface CountryPickerListener {
public void onSelectCountry(String name, String code, String ccode);
}
CountryPicker.java
countryListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (listener != null) {
Country country = selectedCountriesList.get(position);
listener.onSelectCountry(country.getName(),
country.getCode(),
country.getCountryCode()
);
}
}
});
MainActivity.java
// Test Country Code Select
m_CountryCodePicker = CountryPicker.newInstance("Select Country");
m_CountryCodePicker.setListener(new CountryPickerListener() {
@Override
public void onSelectCountry(String name, String code, String ccode) {
Toast.makeText(
getActivity(),
"Country Name: " + name + " - Code: " + code
+ " - Ccode: " + ccode
+ " - Currency: "
+ CountryPicker.getCurrencyCode(code),
Toast.LENGTH_SHORT).show();
m_CountryCodePicker.dismiss();
}
});
m_CountryCodePicker.show(getActivity().getSupportFragmentManager(), "COUNTRY_PICKER");
Regards,
Rchockxm
Hello!
My Android is in Spanish but I see the country's names in English.
I know you can get all those names localized automatically from the API.
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
Log.d("---", "Country Code = " + obj.getCountry() + ", Country Name = " + obj.getDisplayCountry());
}
This would be a nice improvement and you don't have to write thousands of country names.
Hi
I use your code
I make a TextView and if I click on it its open on full screen your Countrypicker MainActivity but if I select a country how can I set the text of the TextView to the country name?
How would do you do this?
I want to create a Screen on the Screen is in the top a text then you can select your country but I don´t know how to do.
Please help me.
Hello,
I am trying to use CountryPicker in my project under a form where a user enters his/her address. Here is my code:
public class FromMessageActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_from_message);
// Show the Up button in the action bar.
//setupActionBar();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
CountryPicker picker = new CountryPicker();
picker.setListener(new CountryPickerListener() {
@Override
public void onSelectCountry(String name, String code) {
Toast.makeText(
FromMessageActivity.this,
"Country Name: " + name,
Toast.LENGTH_SHORT).show();
}
});
transaction.replace(R.id.edt_ctry, picker);
transaction.commit();
}
Here is my layout file:
<EditText
android:id="@+id/edt_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="@string/city_hint"
android:inputType="text"
android:padding="6dp"
android:textColor="#FFFFFF"
android:textColorHint="#FFFFFF" />
<EditText
android:id="@+id/edt_state"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:ems="10"
android:hint="@string/state_hint"
android:inputType="text"
android:padding="6dp"
android:textColor="#FFFFFF"
android:textColorHint="#FFFFFF" />
<EditText
android:id="@+id/edt_postcode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:ems="10"
android:hint="@string/postcode_hint"
android:inputType="number"
android:padding="6dp"
android:textColor="#FFFFFF"
android:textColorHint="#FFFFFF" >
<requestFocus />
</EditText>
<LinearLayout
android:id="@+id/edt_ctry"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="6dp"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
I am unable to use the picker for selecting a country. This is how it looks:
Please guide me as I am a beginner to android programming.
Thanks,
Khushboo
The resolution of the flags is too low, and therefore unsharp on xxdpi screens. Tested on LG Nexus 5.
The search icon is scaled, and unsharp on xxdpi screens. Tested on LG Nexus 5.
The app icon and app theme in the manifest causes conflicts. Please remove those lines from the library as they cause trouble. Almost every library developer have removed this from their manifest files. It would be great if you do this too.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.