Android,如何在编辑文本中为 phone 号码验证创建国家代码?

Android, How do i create country code in edit text for phone number validation?

我想为我的应用程序创建一个 OTP 代码,那么如何为 phone 号码验证创建一个国家代码。 如果你解决了这样的问题,请分享给我。 谢谢

使用 TelephonyManager 创建国家代码。

TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
String countryCodeValue = tm.getNetworkCountryIso();

创建一个名为 country_codes.xml

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

    <string-array name="country_code">
        <item>+93,</item>
        <item>+355,</item>
        <item>+213,</item>
        <item>+684,</item>
        <item>+376,</item>
        <item>+244,</item>
        <item>+1&#8211;264,</item>
        <item>+672,</item>
        <item>+1&#8211;268,</item>
        <item>+54,</item>
        <item>+374,</item>
        <item>+297,</item>
        <item>+61,</item>
        <item>+43,</item>
        <item>+994,</item>
        <item>+1&#8211;242,</item>
        <item>+973,</item>
        <item>+ 880,</item>
        <item>+1&#8211;246,</item>
        <item>+375,</item>
        <item>+32,</item>
        <item>+501,</item>
        <item>+229,</item>
        <item>+1&#8211;441,</item>
        <item>+975,</item>
        <item>+591,</item>
        <item>+387,</item>
        <item>+267,</item>
        <item>+55,</item>
        <item>+673,</item>
        <item>+359,</item>
        <item>+226,</item>
        <item>+257,</item>
        <item>+855,</item>
        <item>+237,</item>
        <item>+1,</item>
        <item>+238,</item>
        <item>+1&#8211;345,</item>
        <item>+236,</item>
        <item>+235,</item>
        <item>+56,</item>
        <item>+86,</item>
        <item>+61,</item>
        <item>+61,</item>
        <item>+57,</item>
        <item>+269,</item>
        <item>+242,</item>
        <item>+243,</item>
        <item>+682,</item>
        <item>+506,</item>
        <item>+385,</item>
        <item>+53,</item>
        <item>+357,</item>
        <item>+420,</item>
        <item>+45,</item>
        <item>+253,</item>
        <item>+1&#8211;767,</item>
        <item>+809,</item>
        <item>+593,</item>
        <item>+20,</item>
        <item>+503,</item>
        <item>+240,</item>
        <item>+291,</item>
        <item>+372,</item>
        <item>+251,</item>
        <item>+500,</item>
        <item>+298,</item>
        <item>+679,</item>
        <item>+358,</item>
        <item>+33,</item>
        <item>+594,</item>
        <item>+241,</item>
        <item>+220,</item>
        <item>+995,</item>
        <item>+49,</item>
        <item>+233,</item>
        <item>+350,</item>
        <item>+44,</item>
        <item>+30,</item>
        <item>+299,</item>
        <item>+1&#8211;473,</item>
        <item>+590,</item>
        <item>+1&#8211;671,</item>
        <item>+502,</item>
        <item>+224,</item>
        <item>+245,</item>
        <item>+592,</item>
        <item>+509,</item>
        <item>+504,</item>
        <item>+852,</item>
        <item>+36,</item>
        <item>+354,</item>
        <item>+91,</item>
        <item>+62,</item>
        <item>+98,</item>
        <item>+964,</item>
        <item>+353,</item>
        <item>+972,</item>
        <item>+39,</item>
        <item>+225,</item>
        <item>+1&#8211;876,</item>
        <item>+81,</item>
        <item>+962,</item>
        <item>+7,</item>
        <item>+254,</item>
        <item>+686,</item>
        <item>+850,</item>
        <item>+82,</item>
        <item>+965,</item>
        <item>+996,</item>
        <item>+856,</item>
        <item>+371,</item>
        <item>+961,</item>
        <item>+266,</item>
        <item>+231,</item>
        <item>+218,</item>
        <item>+423,</item>
        <item>+370,</item>
        <item>+352,</item>
        >
        <item>+853,</item>
        <item>+389,</item>
        <item>+261,</item>
        <item>+265,</item>
        <item>+60,</item>
        <item>+960,</item>
        <item>+223,</item>
        <item>+356,</item>
        <item>+692,</item>
        <item>+596,</item>
        <item>+222,</item>
        <item>+230,</item>
        <item>+269,</item>
        <item>+52,</item>
        <item>+691,</item>
        <item>+373,</item>
        <item>+377,</item>
        <item>+976,</item>
        <item>+382,</item>
        <item>+1&#8211;664,</item>
        <item>+212,</item>
        <item>+258,</item>
        <item>+95,</item>
        <item>+264,</item>
        <item>+674,</item>
        <item>+977,</item>
        <item>+31,</item>
        <item>+599,</item>
        <item>+687,</item>
        <item>+64,</item>
        <item>+505,</item>
        <item>+227,</item>
        <item>+234,</item>
        <item>+683,</item>
        <item>+672,</item>
        <item>+670,</item>
        <item>+47,</item>
        <item>+968,</item>
        <item>+92,</item>
        <item>+680,</item>
        <item>+507,</item>
        <item>+675,</item>
        <item>+595,</item>
        <item>+51,</item>
        <item>+63,</item>
        <item>+48,</item>
        <item>+689,</item>
        <item>+351,</item>
        <item>+1&#8211;787,</item>
        <item>+974,</item>
        <item>+262,</item>
        <item>+40,</item>
        <item>+7,</item>
        <item>+250,</item>
        <item>+290,</item>
        <item>+1&#8211;869,</item>
        <item>+1&#8211;758,</item>
        <item>+508,</item>
        <item>+1&#8211;784,</item>
        <item>+684,</item>
        <item>+378,</item>
        <item>+239,</item>
        <item>+966,</item>
        <item>+221,</item>
        <item>+381,</item>
        <item>+248,</item>
        <item>+232,</item>
        <item>+65,</item>
        <item>+421,</item>
        <item>+386,</item>
        <item>+677,</item>
        <item>+252,</item>
        <item>+27,</item>
        <item>+34,</item>
        <item>+94,</item>
        <item>+249,</item>
        <item>+597,</item>
        <item>+268,</item>
        <item>+46,</item>
        <item>+41,</item>
        <item>+963,</item>
        <item>+886,</item>
        <item>+992,</item>
        <item>+255,</item>
        <item>+66,</item>
        <item>+228,</item>
        <item>+690,</item>
        <item>+676,</item>
        <item>+1&#8211;868,</item>
        <item>+216,</item>
        <item>+90,</item>
        <item>+993,</item>
        <item>+1&#8211;649,</item>
        <item>+688,</item>
        <item>+44,</item>
        <item>+1,</item>
        <item>+256,</item>
        <item>+380,</item>
        <item>+971,</item>
        <item>+598,</item>
        <item>+998,</item>
        <item>+678,</item>
        <item>+39,</item>
        <item>+58,</item>
        <item>+84,</item>
        <item>+1&#8211;284,</item>
        <item>+1&#8211;340,</item>
        <item>+681,</item>
        <item>+967,</item>
        <item>+260,</item>
        <item>+263,</item>


    </string-array>
    <string-array name="country_name">
        <item>Afghanistan</item>
        <item>Albania</item>
        <item>Algeria</item>
        <item>American Samoa</item>
        <item>Andorra</item>
        <item>Angola</item>
        <item>Anguilla</item>
        <item>Antarctica</item>
        <item> Antigua and Barbuda</item>
        <item>Argentina</item>
        <item>Armenia</item>
        <item>Aruba</item>
        <item>Australia</item>
        <item>Austria</item>
        <item>Azerbaijan</item>
        <item>Bahamas</item>
        <item>Bahrain</item>
        <item>Bangladesh</item>
        <item>Barbados</item>
        <item>Belarus</item>
        <item>Belgium</item>
        <item>Belize</item>
        <item>Benin</item>
        <item>Bermuda</item>
        <item>Bhutan</item>
        <item>Bolivia</item>
        <item>Bosnia-Herzegovina</item>
        <item>Botswana</item>
        <item>Brazil</item>
        <item>Brunei Darussalam</item>
        <item>Bulgaria</item>
        <item>Burkina Faso</item>
        <item>Burundi</item>
        <item>Cambodia</item>
        <item>Cameroon</item>
        <item>Canada</item>
        <item>Cape Verde </item>
        <item>Cayman Islands</item>
        <item>Central African Republic</item>
        <item>Chad </item>
        <item>Chile </item>
        <item>China </item>
        <item>Christmas Island</item>
        <item>Cocos (Keeling) Islands</item>
        <item>Colombia </item>
        <item>Comoros </item>
        <item>Congo </item>
        <item>Congo, Dem. Republic </item>
        <item>Cook Islands</item>
        <item>Costa Rica </item>
        <item>Croatia</item>
        <item>Cuba </item>
        <item>Cyprus</item>
        <item>Czech </item>
        <item>Denmark </item>
        <item>Djibouti</item>
        <item>Dominica </item>
        <item>Dominican</item>
        <item>Ecuador </item>
        <item>Egypt </item>
        <item>El Salvador</item>
        <item>Equatorial</item>
        <item>Eritrea </item>
        <item>Estonia </item>
        <item>Ethiopia </item>
        <item>Falkland Islands (Malvinas)</item>
        <item>Faroe Islands</item>
        <item>Fiji</item>
        <item>Finland </item>
        <item>France </item>
        <item>French Guiana</item>
        <item>Gabon</item>
        <item>Gambia </item>
        <item>Georgia </item>
        <item>Germany </item>
        <item>Ghana </item>
        <item>Gibraltar </item>
        <item>Great Britain </item>
        <item>Greece </item>
        <item>Greenland</item>
        <item>Grenada </item>
        <item>Guadeloupe (French) </item>
        <item>Guam (USA)</item>
        <item>Guatemala </item>
        <item>Guinea </item>
        <item>Guinea Bissau </item>
        <item>Guyana </item>
        <item>Haiti </item>
        <item>Honduras </item>
        <item>Hong Kong </item>
        <item>Hungary </item>
        <item>Iceland </item>
        <item>India </item>
        <item>Indonesia </item>
        <item>Iran </item>
        <item>Iraq </item>
        <item>Ireland </item>
        <item>Israel </item>
        <item>Italy</item>
        <item>Ivory </item>
        <item>Jamaica </item>
        <item>Japan </item>
        <item>Jordan </item>
        <item>Kazakhstan </item>
        <item>Kenya </item>
        <item>Kiribati </item>
        <item>Korea-North</item>
        <item>Korea-South </item>
        <item>Kuwait </item>
        <item>Kyrgyzstan </item>
        <item>Laos </item>
        <item>Latvia </item>
        <item>Lebanon </item>
        <item>Lesotho </item>
        <item>Liberia </item>
        <item>Libya </item>
        <item>Liechtenstein </item>
        <item>Lithuania</item>
        <item>Luxembourg </item>
        <item>Macau</item>
        <item>Macedonia </item>
        <item>Madagascar </item>
        <item>Malawi </item>
        <item>Malaysia </item>
        <item>Maldives </item>
        <item>Mali </item>
        <item>Malta </item>
        <item>Marshall Islands </item>
        <item>Martinique (French) </item>
        <item>Mauritania </item>
        <item>Mauritius Port</item>
        <item>Mayotte </item>
        <item>Mexico </item>
        <item>Micronesia </item>
        <item>Moldova </item>
        <item>Monaco</item>
        <item>Mongolia</item>
        <item>Montenegro </item>
        <item>Montserrat </item>
        <item>Morocco</item>
        <item>Mozambique </item>
        <item>Myanmar</item>
        <item>Namibia </item>
        <item>Nauru </item>
        <item>Nepal </item>
        <item>Netherlands</item>
        <item>Netherlands Antilles</item>
        <item>New Caledonia (French)</item>
        <item>New Zealand </item>
        <item>Nicaragua </item>
        <item>Niger </item>
        <item>Nigeria </item>
        <item>Niue </item>
        <item>Norfolk Island </item>
        <item>Northern Mariana Islands </item>
        <item>Norway</item>
        <item>Oman </item>
        <item>Pakistan </item>
        <item>Palau </item>
        <item>Panama </item>
        <item>Papua New Guinea Port</item>
        <item>Paraguay </item>
        <item>Peru </item>
        <item>Philippines </item>
        <item>Poland</item>
        <item>Polynesia (French) </item>
        <item>Portugal </item>
        <item>Puerto Rico </item>
        <item>Qatar </item>
        <item>Reunion (French) </item>
        <item>Romania </item>
        <item>Russia </item>
        <item>Rwanda </item>
        <item>Saint Helena </item>
        <item>Saint Kitts &amp; Nevis Anguilla</item>
        <item>Saint Lucia </item>
        <item>Saint Pierre and Miquelon</item>
        <item>Saint Vincent &amp; Grenadines </item>
        <item>Samoa </item>
        <item>San Marino </item>
        <item>Sao Tome and Principe</item>
        <item>Saudi Arabia</item>
        <item>Senegal </item>
        <item>Serbia </item>
        <item>Seychelles </item>
        <item>Sierra Leone</item>
        <item>Singapore </item>
        <item>Slovakia </item>
        <item>Slovenia </item>
        <item>Solomon Islands</item>
        <item>Somalia</item>
        <item>South Africa </item>
        <item>Spain </item>
        <item>Sri Lanka </item>
        <item>Sudan</item>
        <item>Suriname</item>
        <item>Swaziland </item>
        <item>Sweden </item>
        <item>Switzerland</item>
        <item>Syria </item>
        <item>Taiwan </item>
        <item>Tajikistan</item>
        <item>Tanzania </item>
        <item>Thailand </item>
        <item>Togo </item>
        <item>Tokelau </item>
        <item>Tonga </item>
        <item>Trinidad and Tobago </item>
        <item>Tunisia </item>
        <item>Turkey </item>
        <item>Turkmenistan </item>
        <item>Turks and Caicos Islands</item>
        <item>Tuvalu </item>
        <item>U.K. </item>
        <item>USA </item>
        <item>Uganda </item>
        <item>Ukraine </item>
        <item>United Arab Emirates</item>
        <item>Uruguay </item>
        <item>Uzbekistan </item>
        <item>Vanuatu</item>
        <item>Vatican </item>
        <item>Venezuela</item>
        <item>Vietnam </item>
        <item>Virgin Islands (British) </item>
        <item>Virgin Islands (USA)</item>
        <item>Wallis and Futuna Islands</item>
        <item>Yemen</item>
        <item>Zambia </item>
        <item>Zimbabwe </item>

    </string-array>
</resources>

在 activity 的布局中,在编辑文本前添加微调器

  <Spinner
                    android:id="@+id/spinner"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/inner_img_xxxl"
                    android:dropDownWidth="220dp" />

在 activity 中设置适配器以显示所有国家代码和国家名称。

   private void setDataToSpinner() {
        final ArrayList<String> countryCodeList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.country_code)));
        final ArrayList<String> countryNameList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.country_name)));

        ArrayAdapter<String> adp = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, countryCodeList) {

            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                View row = View.inflate(LoginActivity.this, R.layout.spinner_dropdown_view, null);
                TextView countrycodeTV = row.findViewById(R.id.countrycodeTV);
                TextView countrynameTV = row.findViewById(R.id.countrynameTV);

                countrycodeTV.setText(countryCodeList.get(position));
                countrynameTV.setText(countryNameList.get(position));

                AppController.getInstance().setTypefaceNeon(countrycodeTV);
                AppController.getInstance().setTypefaceNeon(countrynameTV);
                return row;
            }


            public View getView(int position, View convertView, ViewGroup parent) {
                View row = View.inflate(LoginActivity.this, R.layout.spinner_get_view, null);
                TextView countrycodeTV = row.findViewById(R.id.countrycodeTV);
                TextView countrynameTV = row.findViewById(R.id.countrynameTV);
                AppController.getInstance().setTypefaceNeon(countrycodeTV);
                AppController.getInstance().setTypefaceNeon(countrynameTV);
                countrycodeTV.setText(countryCodeList.get(position));
                countrynameTV.setText(countryNameList.get(position));
                return row;
            }
        };


        adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        binding.spinner.setAdapter(adp);}

创建布局simple_spinner_item

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

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@android:id/text1"
        style="?android:attr/spinnerItemStyle"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:textAlignment="inherit"/>

创建布局spinner_get_view

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/countrycodeTV"
        style="?android:attr/spinnerItemStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:maxLines="1"
        android:textAlignment="inherit"
        android:textSize="@dimen/text_size_button_xs" />

    <TextView
        android:id="@+id/countrynameTV"
        style="?android:attr/spinnerItemStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_toEndOf="@+id/countrycodeTV"
        android:ellipsize="marquee"
        android:maxLines="1"
        android:textAlignment="inherit"
        android:textSize="@dimen/text_size_button_xs" />


</RelativeLayout>

谢谢大家的回答, 我找到了解决问题的方法,使用库 'com.hbb20:ccp:1.7.2'.

库是“hbb20 国家代码选择器”。你可以在这里找到它 Github link: https://github.com/hbb20/CountryCodePickerProject