iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >第1个Android应用程序 Android制作简单单页导航
  • 848
分享到

第1个Android应用程序 Android制作简单单页导航

程序单页Android 2022-06-06 08:06:11 848人浏览 独家记忆
摘要

本例子演示如何添加一个简单的单页导航,在此基础上,再演示如何在第2个页面中显示第1个页面中拨打过的所有电话号码。 (1)通过该例子理解Android App的基本架构。 (2)

本例子演示如何添加一个简单的单页导航,在此基础上,再演示如何在第2个页面中显示第1个页面中拨打过的所有电话号码。

(1)通过该例子理解Android App的基本架构

(2)通过该例子理解实现Android多屏幕导航的基本技术。

本例子只是为了让我们对Android App开发有一个较全面的感性认识,读者不必一开始就纠结于代码中的细节问题,涉及到的相关概念在后面还会分别介绍。

运行截图

运行截图(api19、Api21、Api23的实现代码都相同):

界面操作

单击“将文本转换为数字”,观察结果。

单击【转换】按钮,如果转换成功,则【拨号】按钮可用,单击【拨号】按钮,观察弹出的对话框。

如果单击【拨号】按钮,就会自动拨号。

下面介绍主要设计步骤。

1、新建项目

选择模板:Blank App (Android),项目名:PhoneWordApp。

项目创建成功后,删除GettingStarted.Xamarin(广告文件)。

2、界面设计

(1)双击打开Main.axml,分别观察设计界面【Design】和源码【Source】的内容。

(2)按Delete键删除【Hello World,Click Me】按钮。

(3)从【工具箱】中拖放一个【Text (Large)】到设计界面,修改下面的属性:

id:@+id/PhoneText

text:电话

注:此时系统会自动在【Source】中添加对应的代码(下同)。

(4)从【工具箱】中拖放一个【Plain Text】到设计界面,放到【Text (Large)】的下方,修改下面的属性:

id:@+id/PhoneNumberText

text:138 4912 2599

(5)从【工具箱】中拖放一个【Button】到设计界面,放到【Plain Text】的下方,修改下面的属性:

id:@+id/buttonTranslate

text:转换

(6)从【工具箱】中拖放一个【Button】到设计界面放到上一个按钮的下方,修改属性:

id:@+id/buttonCall

text:拨号

经过以上步骤后,即得到下图所示的设计界面:

(7)保存文件,并单击【解决方案资源管理器】上方的【刷新】按钮。

注意:这一步的目的是为了让系统能找到设计界面内的资源并自动生成对应的ID,以便在后面键入C#代码时能看到与设计界面资源相关的智能提示。

3、编写C#代码

(1)鼠标右击项目名à添加类,在弹出的窗口中,选择【Class】模板,名称:PhoneTranslator.cs,如下图所示,单击【添加】按钮。

然后将PhoneTranslator.cs改为下面的代码:


using System.Text;
namespace PhonewordApp
{
  public static class PhonewordTranslator
  {
    public static string ToNumber(string raw)
    {
      if (string.IsNullOrWhiteSpace(raw))
      {
        return "";
      }
      else
      {
        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);
        }
      }
      return newNumber.ToString();
    }
    static bool Contains(this string keyString, char c)
    {
      return keyString.IndexOf(c) >= 0;
    }
    static int? TranslateToNumber(char c)
    {
      if ("ABC".Contains(c))
        return 2;
      else if ("DEF".Contains(c))
        return 3;
      else if ("GHI".Contains(c))
        return 4;
      else if ("JKL".Contains(c))
        return 5;
      else if ("MNO".Contains(c))
        return 6;
      else if ("PQRS".Contains(c))
        return 7;
      else if ("TUV".Contains(c))
        return 8;
      else if ("WXYZ".Contains(c))
        return 9;
      return null;
    }
  }
}

(2)打开MainActivity.cs,将该文件改为下面的代码:


using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
namespace PhonewordApp
{
  [Activity(Label = "PhonewordApp", MainLauncher = true, Icon = "@drawable/icon")]
  public class MainActivity : Activity
  {
    static readonly List<string> phoneNumbers = new List<string>();
    protected override void OnCreate(Bundle bundle)
    {
      base.OnCreate(bundle);
      SetContentView(Resource.Layout.Main);
      var phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
      var buttonTranslate = FindViewById<Button>(Resource.Id.buttonTranslate);
      var buttonCall = FindViewById<Button>(Resource.Id.buttonCall);
      buttonCall.Enabled = false; //禁用【拨号】按钮
      string translatedNumber = string.Empty;
      buttonTranslate.Click += (s, e) =>
      {
        translatedNumber = PhonewordTranslator.ToNumber(phoneNumberText.Text);
        if (string.IsNullOrWhiteSpace(translatedNumber))
        {
          buttonCall.Text = "拨号";
          buttonCall.Enabled = false;
        }
        else
        {
          buttonCall.Text = "播出号码:" + translatedNumber + ",单击确认!";
          buttonCall.Enabled = true;
        }
      };
      var buttonCallHistory = FindViewById<Button>(Resource.Id.buttonCallHistory);
      buttonCallHistory.Click += (sender, e) =>
      {
        var intent = new Intent(this, typeof(CallHistoryActivity));
        intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
        StartActivity(intent);
      };
      buttonCall.Click += (s, e) =>
      {
        phoneNumbers.Add(translatedNumber);
        buttonCallHistory.Enabled = true;
        // 当单击【拨号】时,尝试拨号
        var callDialog = new AlertDialog.Builder(this);
        callDialog.SetMessage("电话:" + translatedNumber + ",拨号吗?");
        callDialog.SetNeutralButton("拨号", delegate
        {
          var callIntent = new Intent(Intent.ActionCall);
          callIntent.SetData(Android.net.Uri.Parse("tel:" + translatedNumber));
          StartActivity(callIntent);
        });
        callDialog.SetNegativeButton("取消", delegate { });
        callDialog.Show();
      };
    }
  }
}

(3)重新生成项目,确保无错误。

注:drawable文件夹下的Icon.png是要显示的图标,也可将其换为其他图标文件。

(4)选择主菜单下该项目的属性,在弹出的窗口中,勾选【CALL PHONE】权限:

注:

(1)这一步必须做,否则因该App无拨号权限,拨号功能会失败。

(2)设置后,查看Properties文件夹下AndroidManifest.xml文件中自动添加的代码,理解权限设置的作用。

4、调试运行及代码片段解释

选择一种模拟器,然后按<F5>键调试运行。

注意:如果使用低于API 23的模拟器,必须设置项目属性(主菜单à项目属性),使用对应版本的API来编译应用程序,否则在模拟器上运行时可能会出现应用程序一闪就退出或者显示“应用程序已停止运行”的情况。

下面解释前面已经实现的代码片段的含义:

(1)如何显示Alert对话框

AlertDialog的详细用法见【第6章 UI设计(三)--对话框】。

(2)如何拨号

下面的代码演示了如何调用系统功能实现拨号:

var callIntent = new Intent(Intent.ActionCall);

callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));

StartActivity(callIntent);

注意:运行前需要先勾选【CALL PHONE】设置允许拨号权限,否则运行会出现异常:

5、创建第2个屏幕跟踪历史记录

(1)打开values文件夹下的Strings.xml文件,添加下面的代码:


<?xml version="1.0" encoding="utf-8"?>
<resources>
……
<string name="CallHistory">拨号记录</string>
</resources>

(2)单击【解决方案资源管理器】上方的“刷新”按钮,或者重新生成项目。

注:选择其中之一即可,目的是为了让C#代码能识别它。

(3)打开Main.axml,从【工具箱】中拖放一个【Button】到Main.axml设计界面,将其放到上一个按钮的下方,修改属性:

id:@+id/buttonCallHistory

text:@string/CallHistory

enabled:false

注: @string/CallHistory的含义是在values文件夹下的Strings.xml文件中提供该变量的值。

此时,可看到“STRING/CALLHISTORY”会自动变成“拨号记录”。

说明:这一步设置变量值的做法是实际的Android App项目中建议的做法,这样做的好处是能提高安卓App运行的效率。而步骤1的做法是一种硬编码的做法,硬编码在安卓App中不是建议的做法,步骤1只是为了刚入门时理解更容易。

(4)鼠标右击项目名,选择【添加…】à【新建项】,在弹出的窗口中,选择“Activity”模板,文件名:CallHistoryActivity.cs,单击【添加】。然后将该文件改为下面的内容(省略了using……):


namespace PhonewordApp
{
[Activity(Label = "CallHistoryActivity")]
public class CallHistoryActivity : ListActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var phoneNumbers =
Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
this.ListAdapter = new ArrayAdapter<string>(this,
Android.Resource.Layout.SimpleListItem1, phoneNumbers);
}
}
}

其中,c = a??b; 的含义相当于:if (a != null ){ c = a;} else { c = b;}

(5)修改MainActivity.cs文件,目标是收集第1个屏幕界面运行时拨打过的所有电话号码,并将其在第2个屏幕上显示出来。在MainActivity.cs文件中添加下面的代码:


……
using System.Collections.Generic;
namespace E01PhonewordApp
{
[Activity(Label = "E01PhonewordApp", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
static readonly List<string> phoneNumbers = new List<string>();
protected override void OnCreate(Bundle bundle)
{
……
var buttonCallHistory =
FindViewById<Button>(Resource.Id.buttonCallHistory);
buttonCallHistory.Click += (sender, e) =>
{
var intent = new Intent(this, typeof(CallHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers",
phoneNumbers);
StartActivity(intent);
};
buttonCall.Click += (s, e) =>
{
phoneNumbers.Add(translatedNumber);
buttonCallHistory.Enabled = true;
// 当单击【拨号】时,尝试拨号
var callDialog = new AlertDialog.Builder(this);
callDialog.SetMessage("播出号码:" + translatedNumber +
",拨号吗?");
callDialog.SetNeutralButton("拨号", delegate
{
// Create intent to dial phone
var callIntent = new Intent(Intent.ActionCall);
callIntent.SetData(Android.Net.Uri.Parse("tel:" +
translatedNumber));
StartActivity(callIntent);
});
callDialog.SetNegativeButton("取消", delegate { });
callDialog.Show();
};
}
}
}

(6)重新生成项目,确保无错误。

(7)运行,再拨一个号(例如12345678901),然后查看拨号记录。下图是用另一种模拟器查看的运行效果(你可以创建多种不同的模拟器,分别观察同一个项目的运行效果):

到这里,我们就完成了用C#编写的第1个Android应用程序。

您可能感兴趣的文章:Android应用 坐标系详细介绍非常实用的小功能 Android应用版本的更新实例Android应用开发中使用GridView网格布局的代码示例Android应用自动更新功能实现的方法Android应用开发中WEBView的常用方法笔记整理Android应用中使用Fragment组件的一些问题及解决方案总结详解Android应用中DialogFragment的基本用法Android应用中设置alpha值来制作透明与渐变效果的实例Android应用中实现手势控制图片缩放的完全攻略Docker 实现浏览器里开发Android应用的功能


--结束END--

本文标题: 第1个Android应用程序 Android制作简单单页导航

本文链接: https://www.lsjlt.com/news/24874.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DW怎么制作一个简单的垂直导航
    本篇内容主要讲解“DW怎么制作一个简单的垂直导航”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“DW怎么制作一个简单的垂直导航”吧!步骤打开Adobe Dreamweaver CC 2015。执行...
    99+
    2023-06-08
  • 简单实现Android应用的启动页
    前言: 平时打开手机的应用时,会跳出来3秒钟的广告后,再进入应用。今天我们就来简单实现一下引导页的功能。 1、首先,新建一个activity页面,命名:SplashActivity ...
    99+
    2024-04-02
  • 怎么使用HTML制作一个简单美观的导航栏
    小编给大家分享一下怎么使用HTML制作一个简单美观的导航栏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在不久前学习了基础知识(...
    99+
    2024-04-02
  • Android Studio制作一个简单的计算器APP
    虽然现在我们日常生活中很少用到计算器,但是第一次尝试在Android Studio上做一个计算器 程序设计步骤: (1)在布局文件中声明编辑文件框EditText,按钮Button等组件。 (2)在MainActivity中获取组件实例。 ...
    99+
    2023-10-03
    android android studio
  • 怎么使用CSS制作一个简单美观的导航栏
    这篇文章主要讲解了“怎么使用CSS制作一个简单美观的导航栏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用CSS制作一个简单美观的导航栏”吧! ...
    99+
    2024-04-02
  • 如何使用CSS3制作响应式导航菜单
    这篇文章主要介绍“如何使用CSS3制作响应式导航菜单”,在日常操作中,相信很多人在如何使用CSS3制作响应式导航菜单问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用CS...
    99+
    2024-04-02
  • 如何使用html和CSS3制作简单侧边导航栏
    这篇文章给大家分享的是有关如何使用html和CSS3制作简单侧边导航栏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果图:html:XML/HTML Code复制内...
    99+
    2024-04-02
  • 使用CSS3怎么制作一个二级导航菜单
    这篇文章给大家介绍使用CSS3怎么制作一个二级导航菜单,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 结构一般导航的主体我们主要是使用ul li标签<body>   &nbs...
    99+
    2023-06-08
  • 怎么用HTML制作一个简单的页面
    这篇文章主要介绍“怎么用HTML制作一个简单的页面”,在日常操作中,相信很多人在怎么用HTML制作一个简单的页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用HTML制...
    99+
    2024-04-02
  • 【JavaScript】3.1 项目实践:制作一个简单的网页应用
    文章目录 项目需求HTML结构JavaScript逻辑添加待办事项标记待办事项删除待办事项保存待办事项 总结 在此章节中,我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用,用户可...
    99+
    2023-12-23
    JavaScript JS 项目实战 简单网页
  • Android用MVP实现一个简单的类淘宝订单页面的示例
    MVP(Model-View-Presenter) 是总所周知MVC模式的一个演变,他们的主要目的都是划分模块职责,降低模块耦合,易测试,提高代码复用,网上有很多相关的知识,这里仅是个人看法。1、层级Model:负责数据相关的操作View:...
    99+
    2023-05-30
    android 淘宝 订单
  • 制作响应式导航菜单:CSS属性的实用技巧
    在现代网页设计中,响应式设计已经变得十分重要,因为它能够使网站在不同大小的屏幕上都能够正确地显示。在响应式设计中,导航菜单是至关重要的一个部分。本文将介绍制作响应式导航菜单的CSS属性的实用技巧,并提供具体的代码示例,希望对你的网站设计有所...
    99+
    2023-11-18
    响应式 导航 CSS属性
  • Android WebView简单应用:构建内嵌网页浏览功能
    在现代移动应用开发中,内嵌网页浏览功能是许多应用程序的常见需求。Android平台提供了WebView组件,它允许开发者将网页内容嵌入到应用中,并提供了丰富的功能和定制选项。本文将介绍如何在Android应用中使用WebView组件,帮助您...
    99+
    2023-09-02
    android harmonyos 华为 服务器 linux 安全 开发语言
  • 利用Python制作简单的小程序:IP查
    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧。IP地址在操作系统里就可以直接查看。但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况。IP地址和地理地址并没有固定的关系,所以我们需要借助网络上的数据...
    99+
    2023-01-31
    简单 程序 Python
  • 如何使用CSS3制作一个简单页面的布局
    这篇文章主要讲解了“如何使用CSS3制作一个简单页面的布局”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用CSS3制作一个简单页面的布局”吧! ...
    99+
    2024-04-02
  • 怎么创建一个简单的SpringBoot应用程序
    要创建一个简单的Spring Boot 应用程序,可以按照以下步骤操作: 使用 Spring Initializr 创建一个新的...
    99+
    2024-04-09
    SpringBoot
  • 如何利用C++实现一个简单的网页爬虫程序?
    如何利用C++实现一个简单的网页爬虫程序?简介:互联网是一个信息的宝库,而通过网页爬虫程序可以轻松地从互联网上获取大量有用的数据。本文将介绍如何使用C++编写一个简单的网页爬虫程序,以及一些常用的技巧和注意事项。一、准备工作安装C++编译器...
    99+
    2023-11-04
    C++ 网页爬虫 程序实现
  • C#开发Windows窗体应用程序的简单操作步骤
    使用C#开发应用程序时,一般包括创建项目、界面设计、设置属性、编写程序代码、保存项目、程序运行等6个步骤。 1.创建项目 在Visual Studio2017开发环境中选择“文件”→...
    99+
    2024-04-02
  • 将Git Bash的重定向功能应用于ASP应用程序:一个简单的指南
    Git Bash是一个强大的命令行工具,提供了很多实用的功能,其中就包括重定向功能。在ASP应用程序中,重定向功能可以帮助我们把输出信息重定向到文件中,方便我们查看和分析。 本文将介绍如何将Git Bash的重定向功能应用于ASP应用程序...
    99+
    2023-07-26
    git bash 重定向
  • Node.js Promises 项目实战:从零开始构建一个简单的 HTTP 应用程序
    Node.js Promises 项目实战 1. 环境搭建 首先,我们需要安装 Node.js 和必要的 npm 模块。在您的终端中运行以下命令: npm install -g nodejs npm install express bod...
    99+
    2024-02-13
    Node.js Promises HTTP GET POST express body-parser
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作