安卓开发教程:【天哥】Android开发视频教程最新版 Android Studio开发_哔哩哔哩_bilibili

开发平台:Android Stdio(和idea里面自带的一模一样,直接分开用Android Stdio挺好)

下载地址:Download Android Studio and SDK tools  |  Android Developers

准备工作

下载好开发工具,Android Studio。下载SDK,注意版本,我之前自己默认下载的31,但是好像不适配,R30可以。

查看自己下没下载,以及版本是什么,可以在这个地方管理:

开发流程

新建文件

先来熟悉目录

每当我们需要设计一个页面时,必须在layout下设计一个.xml文档描述布局,在java中设计一个java活动类描述页面逻辑,并且要在配置文件中注册这个活动,具体可以走如下流程:

1.先创建java活动类

2.发现会同步生成对应的布局文件

3.同时在配置文件中也自动登记了相应的活动 (但如果当时创建的不是活动,而只是一个简单的java文件,23都需要自己手动完成)

coding

先写布局文件activity_main.xml:

  1. 设计整体页面的布局,主要有LinearLayout,RelativeLayout。设计宽高以及内外边距等。
  2. 设计显示号码的输入框,实现拨号可以实时显示在这个输入框中。使用editview部件
  3. 设计拨号盘,可以点击拨号盘实现获取拨号按钮代表的数字、执行按钮所代表的的功能。先设计一个TableLayout,包括4个TableRow,每个TableRow包含3个Button或者ImageButton。

每个组件基本都需要设置id,宽,高,文字,文字大小,文字颜色,内外边距,按钮要设计绑定点击事件。

再完成activity_main.xml布局对应的活动类:

  1. 设计每个按钮点击之后的事件逻辑,例如点击数字1,要让数字显示在编辑框;点击拨号,要检测号码正确性,以及向拨号框所显示的号码,调用安卓所提供的的拨号接口进行拨号;点击删除键,输入不为空的时候将输入框中末尾的数字删掉。
  2. 扩展:当添加联系人按钮的时候,点击联系人键跳转到通讯录页面。
  3. 扩展:设置聊天记录的查询……

补充细节:

设计布局时:

  1. 实现点击按钮的时候有按键被点击的效果,点击之后按钮背景颜色变深。
  2. 按钮可以设置圆角。
  3. 为功能键设置图片。
package com.example.bydialer;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private Button num1,num2,num3,num4,num5,num6,num7,num8,num9,num0,numX,numJ,Dial,contact,delete;private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText) findViewById(R.id.display);}public void clickNum(View view){String str = editText.getText().toString();str += view.getTag().toString();editText.setText(str);}public void contacts(View view){   //查看联系人的功能还没讲完,这个部分的函数体可以先空着//Intent intent = new Intent(MainActivity.this,ContactActivity.class);//startActivity(intent);}public void dial(View view){String str = editText.getText().toString();if ((str !=null) && (!str.trim().equals(""))){Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+str));startActivity(intent);}else{Toast.makeText(MainActivity.this,"请输入号码",Toast.LENGTH_LONG).show();}}public void delete(View view){String str = editText.getText().toString();if((str != null) && (!str.trim().equals(""))) {str = str.substring(0, str.length() - 1);editText.setText(str);}}}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="0dp"><TextViewandroid:id="@+id/tV_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#000000"android:textSize="24sp"/><LinearLayoutandroid:id="@+id/dialpad"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginStart="0dp"android:layout_marginTop="0dp"android:layout_marginEnd="0dp"android:layout_marginBottom="0dp"android:background="@color/white"android:orientation="vertical"android:padding="20dp"><EditTextandroid:id="@+id/display"android:layout_width="match_parent"android:layout_height="40dp"android:layout_gravity="center"android:layout_weight="2"android:background="#FFFFFF"android:ems="10"android:focusable="false"android:gravity="center"android:hint="请输入号码"android:textColor="#000000"android:textSize="24sp"><requestFocus></requestFocus></EditText><TableLayoutandroid:id="@+id/buttons"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:background="@color/cardview_light_background"><TableRowandroid:id="@+id/buttonRow1"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:orientation="horizontal"android:padding="5dp"><Buttonandroid:id="@+id/num1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="1"android:text="1"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="2"android:text="2"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="3"android:text="3"android:textColor="@color/black"android:textSize="24sp"></Button></TableRow><TableRowandroid:id="@+id/buttonRow2"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:orientation="horizontal"android:padding="5dp"><Buttonandroid:id="@+id/num4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="4"android:text="4"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num5"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="5"android:text="5"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num6"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="6"android:text="6"android:textColor="@color/black"android:textSize="24sp"></Button></TableRow><TableRowandroid:id="@+id/buttonRow3"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:orientation="horizontal"android:padding="5dp"><Buttonandroid:id="@+id/num7"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="7"android:text="7"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num8"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="8"android:text="8"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num9"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="9"android:text="9"android:textColor="@color/black"android:textSize="24sp"></Button></TableRow><TableRowandroid:id="@+id/buttonRow4"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:orientation="horizontal"android:padding="5dp"><Buttonandroid:id="@+id/numX"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="*"android:text="*"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/num0"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="0"android:text="0"android:textColor="@color/black"android:textSize="24sp"></Button><Buttonandroid:id="@+id/numJ"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/num"android:onClick="clickNum"android:tag="#"android:text="#"android:textColor="@color/black"android:textSize="24sp"></Button></TableRow></TableLayout><TableRowandroid:id="@+id/buttonRow5"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:layout_marginBottom="10dp"android:background="@color/white"android:orientation="horizontal"android:padding="0dp"><ImageButtonandroid:id="@+id/Contact"android:layout_width="1dp"android:layout_height="50dp"android:layout_margin="5dp"android:layout_weight="1"android:layout_gravity="center"android:background="@drawable/contacts"android:onClick="contacts"android:text="10"android:textColor="@color/black"android:textSize="24sp"></ImageButton><ImageButtonandroid:id="@+id/Dial1"android:layout_width="1dp"android:layout_height="50dp"android:layout_gravity="center"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/dialer"android:onClick="dial"android:text=""android:textColor="@color/black"android:textSize="24sp"></ImageButton><ImageButtonandroid:id="@+id/Dial2"android:layout_width="1dp"android:layout_height="50dp"android:layout_gravity="center"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/dialer"android:onClick="dial"android:text="9"android:textColor="@color/black"android:textSize="24sp"></ImageButton><ImageButtonandroid:id="@+id/Dial3"android:layout_width="1dp"android:layout_height="50dp"android:layout_gravity="center"android:layout_margin="5dp"android:layout_weight="1"android:background="@drawable/delete"android:onClick="delete"android:text="9"android:textColor="@color/black"android:textSize="24sp"></ImageButton></TableRow></LinearLayout></RelativeLayout>

contacts.xml(设计联系人按钮的格式)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/contact1"><shape><solid android:color="#999999"/><corners android:radius="5dp"/></shape></item><item android:state_pressed="false"android:drawable="@drawable/contact0"><shape><solid android:color="#FFFFFF"/><corners android:radius="5dp"/></shape></item>
</selector>

delete.xml(设计删除按钮的格式)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/delete2"><shape><solid android:color="#999999"/><corners android:radius="5dp"/></shape></item><item android:state_pressed="false"android:drawable="@drawable/delete2"><shape><solid android:color="#FFFFFF"/><corners android:radius="5dp"/></shape></item>
</selector>

dialer.xml(设计拨号按钮的格式)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/dial3"><shape><solid android:color="#999999"/><corners android:radius="5dp"/></shape></item><item android:state_pressed="false"android:drawable="@drawable/dial2"><shape><solid android:color="#FFFFFF"/><corners android:radius="5dp"/></shape></item>
</selector>

num.xml(设计数字1-0,*,#按钮的格式)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"><shape><solid android:color="#999999"/><corners android:radius="5dp"/></shape></item><item android:state_pressed="false"><shape><solid android:color="#FFFFFF"/><corners android:radius="5dp"/></shape></item>
</selector>

ps:@drawable/照片名(这些照片我都放在了res/drawable-xxxhdpi,等下会有整个工程文件的链接)

运行模拟

让代码跑起来,验证方式有两种,模拟器&真机验证。

模拟器:配置avd模拟器

选择系统镜像文件

运行项目

真机:

手机打开开发者模式。

开发者模式下允许usb传输数据。

用数据线连接到电脑。

上侧会自动弹出识别手机型号。     

启动项目,安装app,就可以了。

效果如下图:

        

工程文件:

https://github.com/Biangbangbing/ByDial

Android开发——实现一个拨号器(一)相关推荐

  1. Android开发实验-- 电话拨号器实验报告

    电话拨号器实验报告 一.实验准备工作 Android Studio 二.实验详细步骤 1.activity_main页面布局设计 2.mainactivity文件实现功能 3.Androidmainf ...

  2. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

  3. 使用了Dialog,Android开发提升一个档次

    使用了Dialog,Android开发提升一个档次 嘚吧嘚 Dialog是什么呢? Dialog的生命周期是啥样子的? Dialog的使用 普通Dialog SingleDialog(单选Dialog ...

  4. Android开发做一个简单的音乐播放器

    Android开发如何做一个简单的音乐播放器,首先我们先要知道用到的知识点有哪些. 1.MediaPlayer:可以播放本地资源.sd卡内存资源以及网络uri资源,在这里我们播放sd卡上的音乐资源. ...

  5. Android开发之音乐播放器所遇到的问题

    首先,我先声明一下:我的Android Studio是最新版的(2019.11.16) 我要说的是在Android Studio创建一个音乐播放器所遇到的问题 我借鉴的是<Android移动开发 ...

  6. Android打电话功能权限报错,Android实现简单的拨号器功能

    简易拨号器的制作方法,具体如下 一.布局构造 android:layout_width="match_parent" android:layout_height="mat ...

  7. 使用IntentService给自己的Android应用写一个文件下载器。

    接着上一篇的http://www.cnblogs.com/zhengxt/p/3657833.html,当我们想给自己的APP写一个文件下载器时,可以用重写IntentService来实现. 使用In ...

  8. android案例一 电话拨号器

    效果图: 电话拨号器的核心原理:  意图 MainActivity代码: private EditTest et_number; //加载一个布局 setContentView(R.layout.Ma ...

  9. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)

    转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...

最新文章

  1. 创建用于 ASP.NET 的分页程序控件
  2. Codeforces Round #395 (Div. 2)(未完)
  3. 人工智能用哪个语言好 选择Python语言怎么样
  4. java冒泡测试代码,冒泡排序(java可直接跑,算法思想等小儿科不多说直接上代码)...
  5. C++基础::文件流
  6. 初窥JQuery-Jquery简介
  7. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
  8. SGuard64.exe(SGuardwnd) ACE-Guard Client EXE:造成磁盘经常读写,游戏卡顿,及解决方案
  9. python实例 优化目标函数_python scipy optimize.minimize用法及代码示例
  10. swfobject java_SWFObject 2.1以上版本语法介绍
  11. 最新版PandoraBox潘多拉安装adbyby去广告插件图文详细教程!!
  12. 图片剪裁在线html,前端图片裁剪实战
  13. POC_若依管理系统
  14. 我们接了条预算100000000的广告!!!
  15. 更好的在小学语课上用计算机,如何把小学科学课上好教育随笔
  16. 计算机操作系统(慕课版)各章思维导图
  17. 微博改变一切_改变自己是神,改变别人是神经病!(深度好文)
  18. sublime text 添加到鼠标右键功能
  19. Thinkphp5乐兔CRM之Mockplus 原型设计的登录页
  20. confluence 删除_知识管理平台Confluence教程:如何删除或还原页面?

热门文章

  1. Java:菜单(Menu)
  2. [附源码]计算机毕业设计居家养老服务系统小程序Springboot程序
  3. 智慧养老数据可视化(数据大屏)
  4. excel 的 导入
  5. labview下载地址
  6. Mac 应用程序意外退出 movist pro 等
  7. TFN DP12A 对数周期天线 100MHz~2GHz
  8. EDA软件如何与望友DFM软件交互?
  9. python中ulr关键词的转换,“E5 82”怎么转换成中文
  10. NLP领域中文对话系统数据集总结(有下载地址)