当前位置:网站首页 / xamarin / 正文

AY VS2022 xamarin基础-创建电话号码转换器应用

时间:2021年06月24日 | 作者 : aaronyang | 分类 : xamarin | 浏览: 227次 | 评论 0


新建AyCallPhone的Xamarin.Form项目,空白模板,仅安卓的项目

参考文章:练习 - 创建电话号码转换器应用 - Learn | Microsoft Docs

右击共享项目,添加PhonewordTranslator类

   public static class PhonewordTranslator
    {        public static string ToNumber(string raw)
        {            if (string.IsNullOrWhiteSpace(raw))                return null;

            raw = raw.ToUpperInvariant();            var newNumber = new StringBuilder();            foreach (var c in raw)
            {                if (" -0123456789".Contains(c))
                    newNumber.Append(c);                else
                {                    var result = TranslateToNumber(c);                    if (result != null)
                        newNumber.Append(result);                    // Bad character?
                    else
                        return null;
                }
            }            return newNumber.ToString();
        }        static bool Contains(this string keyString, char c)
        {            return keyString.IndexOf(c) >= 0;
        }        static readonly string[] digits = {            "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"
        };        static int? TranslateToNumber(char c)
        {            for (int i = 0; i < digits.Length; i++)
            {                if (digits[i].Contains(c))                    return 2 + i;
            }            return null;
        }
    }

在解决方案资源管理器中,右键单击现有 MainPage.xaml 文件,并选择“删除”。 该操作还会删除代码隐藏 MainPage.xaml.cs 文件。

在名为 MainPage 的新文件中创建新类。 可以使用上述相同过程来创建新类文件。

将此类设为从 ContentPage 派生。 添加 using Xamarin.Forms 语句,因为 ContentPage 位于 Xamarin.Forms 名称空间中。

using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace AyNoteBook
{
    public class MainPage : ContentPage
    {
        public MainPage()
        {
        }
    }
}

为 AyNoteBook 创建 UI


在 MainPage.cs 构造函数中,执行以下操作。

将页的 Padding 都设置为“20”。 设置边距可确保控件不会对着屏幕的边缘。

创建 Spacing = 15 的 StackLayout。

创建 Phoneword UI 所需的控件:

    Label,其中 Text 属性设置为“输入 电话号码:”。

    Entry,使用户可编辑用于从用户处收集输入的电话号码。 这应该用 Text“1-855-XAMARIN”进行初始化。 用户可用自己的文本替换初始文本;但使用 phoneword 预先填充对测试来说比较方便。

    Button,运行逻辑以转换电话号码。 其 Text 属性应设置为“转换”。

    显示 Text“呼叫”的第二个 Button,用于拨打电话。 最初应禁用此 Button(使用 IsEnabled 属性)。

    将 Entry 和两个 Button 控件存储在类字段中,以便稍后与它们进行交互。

    将控件添加到 StackLayout。

    将 StackLayout 分配给 MainPage 的 Content 属性。

给按钮添加事件

using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace AyNoteBook
{
    public class MainPage : ContentPage
    {
        Entry phoneNumberText;
        Button translateButton;
        Button callButton;

        public MainPage()
        {
            this.Padding = new Thickness(20, 20, 20, 20);

            StackLayout panel = new StackLayout
            {
                Spacing = 15
            };

            panel.Children.Add(new Label
            {
                Text = "输入电话号码",
                FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label))
            });

            panel.Children.Add(phoneNumberText = new Entry
            {
                Text = "152JK11C0L0",
            });

            panel.Children.Add(translateButton = new Button
            {
                Text = "转换"
            });

            panel.Children.Add(callButton = new Button
            {
                Text = "呼叫",
                IsEnabled = false,
            });
            translateButton.Clicked += OnTranslate;
            this.Content = panel;
        }
        string translatedNumber;
        private void OnTranslate(object sender, EventArgs e)
        {
            string enteredNumber = phoneNumberText.Text;
            translatedNumber = PhonewordTranslator.ToNumber(enteredNumber);

            if (!string.IsNullOrEmpty(translatedNumber))
            {
                // TODO:
            }
            else
            {
                // TODO:
            }
        }
    }
}



更新 UI

接下来,添加一些逻辑来更改“呼叫”按钮的 Text,以便在成功转换时包含电话号码。 可以使用存储在 translatedNumber 字段中的值。 此外,根据转换的成功情况启用和禁用按钮。 例如,如果 TranslateNumber 返回 null,则禁用该按钮,但如果成功,则启用按钮。


使用 IsEnabled 属性来启用和禁用按钮。

如果号码转换失败,请务必重置“呼叫”按钮的 Title(即删除电话号码)。

     private void OnTranslate(object sender, EventArgs e)
        {
            string enteredNumber = phoneNumberText.Text;
            translatedNumber = PhonewordTranslator.ToNumber(enteredNumber);

            if (!string.IsNullOrEmpty(translatedNumber))
            {
                callButton.IsEnabled = true;
                callButton.Text = "呼叫 " + translatedNumber;
            }
            else
            {
                callButton.IsEnabled = false;
                callButton.Text = "呼叫";
            }
        }


添加点击呼叫按钮的逻辑

使用 Page.DisplayAlert 提示用户,询问他们是否要拨打号码。类似桌面的MessageBox


DisplayAlert 方法会返回 Task。 将 async 关键字添加到“OnCall”,并 await 调用 DisplayAlert。 DisplayAlert 会使用用于“接受”和“取消”按钮文本的标题、消息和两个字符串。 它会返回一个布尔,指示是否已按下“接受”按钮来关闭对话框。

        async void OnCall(object sender, System.EventArgs e)
        {
            if (await this.DisplayAlert(
                "拨号",
                "你是否要拨打  " + translatedNumber + "?",
                "是",
                "否"))
            {
                // TODO: dial the phone
            }
        }

使用 Xamarin.Essentials 库拨打电话

打开 Android 项目的“属性”。 (右键单击“解决方案资源管理器”中的项目名称,然后选择“属性”)

选择“Android 清单”。

在“所需权限”部分中,选中 CALL_PHONE 权限旁边的框(参见下文)。

image.png

        async void OnCall(object sender, System.EventArgs e)
        {
            if (await this.DisplayAlert(
                "拨号",
                "你是否要拨打  " + translatedNumber + "?",
                "是",
                "否"))
            {
                try
                {
                    PhoneDialer.Open(translatedNumber);
                }
                catch (ArgumentNullException)
                {
                    await DisplayAlert("不能拨号", "号码无效.", "好的");
                }
                catch (FeatureNotSupportedException)
                {
                    await DisplayAlert("不能拨号", "号码不支持", "好的");
                }
                catch (Exception)
                {
                    // Other error has occurred.
                    await DisplayAlert("不能拨号", "拨号失败.", "好的");
                }
            }

        }

插上安卓手机,F5运行项目

image.png


运行起来,

image.png

点击转换,转换成功,点击呼叫 PhoneDialer.Open(translatedNumber);

这个代码可以调出 安卓的 拨号面板,号码也传递过去了。

image.png


www.ayjs.net==============

















推荐您阅读更多有关于“vs2022xamarin,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

合肥科大智能常年招聘C# .NET CORE,vue前端,JAVA开发,有想换工作的私聊我AY唯一QQ:875556003和AY交流

抖音号:wpfui 工作是wpf,不接活,目前主要折腾maui

AYUI8社区版Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表