首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在monodroid中创建xxx-xxx-xxxx格式的电话号码

如何在monodroid中创建xxx-xxx-xxxx格式的电话号码
EN

Stack Overflow用户
提问于 2015-09-23 13:17:24
回答 3查看 717关注 0票数 1

我是xamarin新手,如果有人建议我如何将电话号码格式化为xxx-xxx-xxxx格式,请告诉我。我已经在textwatcher中实现了以下code snippet,但当用户按下键盘上的后退按钮时无法捕获。

代码语言:javascript
运行
复制
 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)
    {

    }

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2015-09-23 13:49:34

尝尝这个,

main.xml

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2015-09-23 14:07:57

尝尝这个。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2015-09-23 14:50:51

代码语言:javascript
运行
复制
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)
        {

        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32731484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档