2015-09-23 2 views
1

Я новичок в xamarin Кто-нибудь подскажет, как отформатировать номер телефона в формате xxx-xxx-xxxx. Я внедрил следующее code snippet в textwatcher, но не смог поймать, когда пользователь нажимает кнопку на клавиатуре.Как создать номер телефона, создающий xxx-xxx-xxxx в monodroid

public PhoneNumberTextWatcher(activity context) 
    { 
     this.context = context; 
    } 
    public void AfterTextChanged(IEditable s) 
    { 

      if (s.Length() == 3 || s.Length() == 7) 
      { 
       var phone = s.ToString() + Char.ConvertFromUtf32(45); 
       context.Phone.Text = phone; 
       context.Phone.SetSelection(s.Length()+1); 
      } 



    } 

    public void BeforeTextChanged(Java.Lang.ICharSequence s, int start, int count, int after) 
    { 

    } 

    public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count) 
    { 

    } 

Спасибо.

+0

Вы пытались использовать регулярное выражение? –

+0

Да, я тоже пытался с регулярным выражением – Manohar

+0

Исправьте меня, если я ошибаюсь, кажется, вы хотите проверить, был ли введенный пользователем xxx-xxx-xxxx или нет, это означает, что «123-123-1234» является действительный номер, но «123-12» - нет. Правильно? –

ответ

0

попробовать это,

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.example.formatnumber.FormatNumber" > 

    <Button 
     android:id="@+id/formate" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Formate" /> 

</LinearLayout> 

и Main.java

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class FormatNumber extends Activity { 

    Button btnFormate; 

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

     btnFormate=(Button)findViewById(R.id.formate); 

     btnFormate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "formate : "+formatNumbersAsCode("1234567890"), Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

    private String formatNumbersAsCode(CharSequence s) { 
     return String.format("%s-%s-%s",((String) s).substring(0,3),((String) s).substring(3,6),((String) s).substring(6)); 
    } 
} 
0

Попробуйте это.

public PhoneNumberTextWatcher(activity context) 
{ 
    this.context = context; 
} 

int prevLeng; 
boolean isBackPressed; 

public void AfterTextChanged(IEditable s) 
{ 

     if(isBackPressed) 
     { 
      if (s.Length() == 4 || s.Length() == 8) 
      { 
      var phone = s.ToString().Substring(0,s.Length()-1); 
      context.Phone.Text = phone; 
      context.Phone.SetSelection(s.Length()-1); 
      } 
     } 
     else if (s.Length() == 3 || s.Length() == 7) 
     { 
      var phone = s.ToString() + Char.ConvertFromUtf32(45); 
      context.Phone.Text = phone; 
      context.Phone.SetSelection(s.Length()+1); 
     } 
} 

public void BeforeTextChanged(Java.Lang.ICharSequence s, int start, int count, int after) 
{ 
    prevLeng = s.Length(); 
} 

public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count) 
{ 
    if(prevLeng > s.Length()) 
     isBackPressed = true; 
    else 
     isBackPressed = false; 
} 
0
Finally i got solution .... 

static int curserposition=0; 
     bool backspace; 
     string separator = char.ConvertFromUtf32(45); 


     public void AfterTextChanged(IEditable s) 
     { 
      if (s.Length() > curserposition) 
      { 
       if (s.Length() == 3 || s.Length() == 7) 
       { 
        backspace = false; 
        var phone = s.ToString() + separator; 
        context.edit_Phone.Text = phone; 
        context.edit_Phone.SetSelection(s.Length() + 1); 

       } 
      } 
      else 
      { 
       if (s.Length() != 0) { 
        backspace = true; 
       } 
      } 
      if(backspace) 
      { 
       if (s.Length() > curserposition) 
       { 
        if (s.Length() == 8) 
        { 
         string value=s.ToString().Replace("-", ""); 
         var phone = value.ToString().Substring(0, 3) + separator + value.ToString().Substring(3, 3) + separator + value.ToString().Substring(6); 
         context.edit_Phone.Text = phone; 
         context.edit_Phone.SetSelection(s.Length() + 1); 
         backspace = false; 
        } 
        if(s.Length()==4) 
        { 
         string value = s.ToString().Replace("-", ""); 
         var phone = value.ToString().Substring(0, 3) + separator + value.ToString().Substring(3); 
         context.edit_Phone.Text = phone; 
         context.edit_Phone.SetSelection(s.Length() + 1); 
         backspace = false; 
        } 
       } 
      } 

      curserposition = s.Length(); 
     } 

     public void BeforeTextChanged(Java.Lang.ICharSequence s, int start, int count, int after) 
     { 

     } 

     public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count) 
     { 

     } 
    } 
Смежные вопросы