2016-08-09 3 views
2

enter image description hereAndroid 휴대 전화 입력란

이렇게 휴대 전화 입력을 만들고 싶습니다. 국가 선택기, 이동 통신사 코드 및 전화 번호가 포함되어 있습니다. 나는 국가 선택자와 전화 번호를 만들었습니다.

  <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:gravity="center" 
      app:layout_marginTopPercent="65%" 
      app:layout_widthPercent="70%"> 

      <com.hbb20.CountryCodePicker 
       android:id="@+id/country_code" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       app:contentColor="@color/white" 
       app:defaultNameCode="IL" 
       app:hideNameCode="true" 
       app:textSize="24sp" /> 

      <EditText 
       android:id="@+id/et_number" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:digits="1234567890" 
       android:inputType="number" 
       android:maxLength="15" 
       android:textColor="@color/white" 
       android:textSize="24sp" /> 
     </LinearLayout> 

어떻게 이동 통신사 코드의 EditText 필드를 만드시겠습니까? 선택한 국가의 이동 통신사 번호를 인식해야합니다. 예를 들어 사용자가 이스라엘 (+972)을 선택한 다음 50을 입력하면 id = et_number 인 EditText로 포커스를 전환해야합니다.

답변

0

나는 그것을

다음

내 레이아웃 (PercentRelativeLayout 안에 넣어)되어이 방법

다음
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:gravity="center" 
    app:layout_marginTopPercent="67%" 
    app:layout_widthPercent="80%"> 

    <com.hbb20.CountryCodePicker 
     android:id="@+id/country_code" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:contentColor="@color/white" 
     app:defaultNameCode="IL" 
     app:hideNameCode="true" 
     app:textSize="24sp" /> 

    <EditText 
     android:id="@+id/et_carrier" 
     android:layout_width="60dp" 
     android:layout_height="wrap_content" 
     android:digits="1234567890" 
     android:inputType="number" 
     android:maxLength="3" 
     android:textColor="@color/white" 
     android:textSize="24sp" /> 

    <EditText 
     android:id="@+id/et_number" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:imeOptions="actionDone" 
     android:digits="1234567890" 
     android:inputType="number" 
     android:maxLength="10" 
     android:textColor="@color/white" 
     android:textSize="24sp" /> 
</LinearLayout> 

그것이

country_code = (CountryCodePicker) findViewById(R.id.country_code); 
et_carrier = (EditText) findViewById(R.id.et_carrier); 
et_number = (EditText) findViewById(R.id.et_number); 

// Get country code from sim 
defaultRegion = PhoneNumberUtils.getDefaultCountryIso(getApplicationContext()); 

// Set country code to spinner 
country_code.setCountryForNameCode(defaultRegion); 

// set white underline in number edit text 
et_number.getBackground().mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); 
et_carrier.getBackground().mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); 

// jump to number edit when carrier code is filled 
et_carrier.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
    if (editable.length() == 3) { 
     et_number.requestFocus(); 
     et_number.setSelection(et_number.getText().length()); 
    } 

    } 
}); 

// jump to carrier edit when number is deleted 
et_number.addTextChangedListener(new TextWatcher() { 
@Override 
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

} 

@Override 
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    if (TextUtils.isEmpty(et_number.getText())) { 
     et_carrier.requestFocus(); 
     et_carrier.setSelection(et_carrier.getText().length()); 
} 

} 

@Override 
public void afterTextChanged(Editable editable) { 
} 
}); 

어떻게 작동 그리고 여기에 읽을 수있는 기능과 사전입니다했다 SIM에서 휴대 전화 번호를 입력하십시오.

/** 
* Try to prefill SIM mobile number. 
* If permissions are not granted, request them. 
*/ 
private void tryAndPrefillPhoneNumber() { 
    if (checkCallingOrSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { 
     TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     et_carrier.setText(formatPhoneNumber(manager.getLine1Number(), defaultRegion, "carrier")); 
     et_number.setText(formatPhoneNumber(manager.getLine1Number(), defaultRegion, "number")); 

    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0); 
    } 
} 

/** 
* Try to prefill number, or show explanation to user 
* why permissions need to be granted 
* 
* @param requestCode 
* @param permissions 
* @param grantResults 
*/ 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     tryAndPrefillPhoneNumber(); 
    } else { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0])) { 

      message = getString(R.string.permission_phone_number_text); 

      showToast(message); 
     } 
    } 
} 

private String formatPhoneNumber(String phoneString, String countryIso, String type) { 

    try { 
     // information needed to search for phone phone using google lib 
     PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); 
     Phonenumber.PhoneNumber phoneNumber = phoneUtil.parse(phoneString, countryIso); 
     int carrierLength = phoneUtil.getLengthOfNationalDestinationCode(phoneNumber); 

     if (type != null) { 
      if (type.equals("local")) { 
       // parse the phone number without country code 
       return String.valueOf(phoneNumber.getNationalNumber()); 

      } else if (type.equals("carrier")) { 
       // parse mobile carrier number 
       return String.valueOf(phoneNumber.getNationalNumber()).substring(0, carrierLength); 

      } else if (type.equals("number")) { 
       // parse phone number without country code and carrier number 
       return String.valueOf(phoneNumber.getNationalNumber()).substring(carrierLength); 

      } else { 
       //parse full number 
       return phoneUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL); 
      } 
     } 

    } catch (NumberParseException e) { 
     e.printStackTrace(); 
    } 

    // if not phone number found return 
    return null; 
} 
관련 문제