标题
- 前言
- Android Studio介绍
- 代码
- 总结
前言
遇到女生生日,不得准备生日礼物,刚好在学Android,顺便写了一个Dome给她当生日礼物。(很简单的而已,不喜勿喷)
Android Studio介绍
Android Studio是Google旗下的一款软件,它可以使用Java、Kotlin、以及C++开发。当然了,Java开发是现在的潮流,但Kotlin开发才是未来。我这使用了Java开发,还是用熟悉的语言写起来得心应手。
&emspAndroid Studio是有官方教程的,比较方便。
安卓发展这么多年了,教程和错误都很完备了,学会百度,幸福一生。Android Studio安装教程
该教程是很老的版本,但八九不离十,变化不大,有问题可以联系本作者,免费解答。
安装和界面介绍就不写了,别人都有。直接开始代码吧。
哦,对,还有效果
点击按钮会跳转到下一个Activity,那个时钟是实时显示时间的,算一个创新点。
点击那个surprise会跳转到bilibili,当然了,你也可以跳到其他APP或网页。
哦,还有,这个APP是有背景音乐的。
代码
首先,我们打开Android Studio,新建一个project
可以看到有很多的模板,我们选择Empty Activity,当然也可以选择No Activity,不过有点麻烦。
点击Next,可以看到下面的情况,
1、这里是你的project的名字,遵循C语言起名规则
2、这里是你的Dome的存储路径,不可以有中文,有中文那个finish不会亮,不信你试试。
3、这里选Java,你选Kotlin的话也没问题,语言只是工具嘛。
4、这里是你安装的SDK,相当于一个解释器,没有的话要检查一下你的安装包是不是少了什么东西,还是出了什么问题,一般按照官方的安装是没有问题的。
点击Finish,就有以下界面了。
点一下右上角的小三角,运行一波,就会发现,报错,还提示你要装什么东西。对,这个测试需要安卓手机,但你又不想用自己的手机怎么搞?那就用Android Studio自带的虚拟机。
安装虚拟机的教程在下面的链接虚拟机安装教程
啥都装好后,就可以写Dome了。(其实可以运行一下,其实你再创建project的时候就已经写了一个Dome了,当然了,是最简单的Hello world,-)
在这里我新建了两个Activity和一个Java,和添加了一个依赖。是不是很简单。
我们来认识一下各个重要的文件。
.java文件用来写功能的,实现各个控件的功能,其实不难。
这里的drawable一般都是用来存储图片和动图的
layout是页面布局,.xml文件都是布局文件,就跟UI设计一样,不过使用代码实现的。
最后就是添加依赖的地方了。这里有很大用处,各种炫酷的东西都要在这里添加依赖。
好了,多点点就会了,点错了就重开咯,又不是毕业设计。
写APP先学会写按键,毕竟,按键贯穿整个APP,这里只介绍两种按键类型。
1、按键的外观设计
这里使用了最普通的按键设计,你也可以搞的花里胡哨的,实用就行。花里胡哨只需在百度一搜就好了,也可以问问chatgpt。
先有表面的东西才能搞内在的东西,先设计布局在实现其功能。
我们在layout.xml里添加以下代码,布局要改为相对布局,我觉得这个比较方便。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"tools:ignore="ExtraText,MissingClass">//。。。。。。。。。。在这中间添加控件
</RelativeLayout>
有按键才能跟用户互动嘛,再加点小图片和文字,搞的漂漂亮亮的,女孩子才会喜欢嘛。
<!--文本框-->
//这里就是添加了文字,祝你生日快乐!斜体<TextViewandroid:id="@+id/text01"android:layout_margin="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="italic" //这个就是斜体,软件自带的android:text="祝你生日快乐!"android:textColor="@android:color/holo_red_light" //文字颜色:亮红色android:textSize="25dp" />//文字大小//同理可得<TextViewandroid:id="@+id/text02"android:layout_margin="90dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="italic"android:text="送给****"android:textColor="@android:color/holo_red_light"android:textSize="25dp" /><TextView //这里是给一个时钟做准备的,不喜欢的话也可以不要,还是挺难的android:id="@+id/tvTime"android:layout_toRightOf="@id/text01"android:layout_marginTop="20dp"android:layout_marginLeft="30dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="italic"android:text=" "android:textColor="@android:color/holo_purple"android:textSize="25dp" /><!--图片展示控件-->//这里就是添加图片的地方,可以添加女生的照片或者其他照片,得而不得,不失为一种美好。<ImageViewandroid:id="@+id/image01"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="200dp"android:layout_marginBottom="41dp"android:src="@drawable/img" /><!--按钮控件-->
//按键模块,用来跳转到另一个activity的<Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="70dp"android:layout_alignParentBottom="true"android:layout_centerVertical="true"android:layout_marginTop="10dp"android:layout_marginBottom="41dp"android:text="请点击此按钮" /> //文字可以改一改
第一个Activity布局已经写完了,同理第二个Activity的布局也是一样的,新建Activity就不说了,这个自行摸索。
接下来就是实现Activity之间的跳转、Activity到网站的跳转和背景音乐的设置。
先来看第一个Activity之间的跳转。
setContentView(R.layout.activity_main);// 获取控件idButton btn1 = findViewById(R.id.btn);// 监听点击事件btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 跳转到另一个名为ButtonActivity的界面Intent intent=new Intent(MainActivity.this,MainActivity2.class);startActivity(intent);}});
这里使用了一个按键监听,基础操作就不多说了,复制修改就好了。
接下来就是Activity跳转到网站。
setContentView(R.layout.activity_main2);Btn2 = findViewById(R.id.btn01);final Uri uri=Uri.parse("https://www.bilibili.com/" +"video/BV1ab411n7no/" +"?share_source=copy_web&vd_source=50c79c9ca19b953130a4988502bded45");Btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(Intent.ACTION_VIEW,uri);startActivity(intent);}});
这个其实跟Activity之间的跳转非常像,只是将跳转的对象换成了网站。关键字:`final Uri uri=Uri.parse
`最后就是背景音乐的设置。
// 启动服务播放背景音乐Intent intent = new Intent(MainActivity.this, MyIntentService.class);String action = MyIntentService.ACTION_MUSIC;// 设置actionintent.setAction(action);startService(intent);
还要新建一个.java文件来实现音乐的播放,当然,你也可以在Activity里写,不过代码太长不建议这样写,而且后期的模块化学习无益。
package com.example.happybirthday;import android.app.IntentService;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;/*** An {@link IntentService} subclass for handling asynchronous task requests in* a service on a separate handler thread.* <p>* TODO: Customize class - update intent actions and extra parameters.*/
public class MyIntentService extends IntentService {// TODO: Rename actions, choose action names that describe tasks that this// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMSpublic static final String ACTION_FOO = "com.example.bouzouki.demobilising.action.FOO";public static final String ACTION_BAZ = "com.example.bouzouki.demobilising.action.BAZ";// action声明public static final String ACTION_MUSIC = "com.example.bouzouki.demobilising.action.music";// TODO: Rename parameterspublic static final String EXTRA_PARAM1 = "com.example.bouzouki.demobilising.extra.PARAM1";public static final String EXTRA_PARAM2 = "com.example.bouzouki.demobilising.extra.PARAM2";// 声明MediaPlayer对象private MediaPlayer mediaPlayer;public MyIntentService() {super("MyIntentService");}@Overrideprotected void onHandleIntent(Intent intent) {if (intent != null) {final String action = intent.getAction();if (ACTION_FOO.equals(action)) {final String param1 = intent.getStringExtra(EXTRA_PARAM1);final String param2 = intent.getStringExtra(EXTRA_PARAM2);handleActionFoo(param1, param2);} else if (ACTION_BAZ.equals(action)) {final String param1 = intent.getStringExtra(EXTRA_PARAM1);final String param2 = intent.getStringExtra(EXTRA_PARAM2);handleActionBaz(param1, param2);}// 根据intent设置的action来执行对应服务的操作if (ACTION_MUSIC.equals(action)){handleActionMusic();}}}/*** 该服务执行的操作用来播放背景音乐*/private void handleActionMusic() {if (mediaPlayer == null){// 根据音乐资源文件创建MediaPlayer对象 设置循环播放属性 开始播放mediaPlayer = MediaPlayer.create(this, R.raw.bd_02);mediaPlayer.setLooping(true);mediaPlayer.start();}}/*** Handle action Foo in the provided background thread with the provided* parameters.*/private void handleActionFoo(String param1, String param2) {// TODO: Handle action Foothrow new UnsupportedOperationException("Not yet implemented");}/*** Handle action Baz in the provided background thread with the provided* parameters.*/private void handleActionBaz(String param1, String param2) {// TODO: Handle action Bazthrow new UnsupportedOperationException("Not yet implemented");}
}
再把音乐.mp3复制到raw里就好了,再修改一下音乐文件名字。
最后就是时间的设置:
先在这里添加以下代码
implementation 'com.google.android.gms:play-services-auth:20.5.0'
添加依赖
最后就是添加实现代码,覆盖掉之前的空白text
timer = new Timer();//创建timer对象tvTime=findViewById(R.id.tvTime);timer.schedule(new TimerTask() {@Overridepublic void run() {Log.v("Timer","run()...");mCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));int hour = mCalendar.get(Calendar.HOUR_OF_DAY);//HOUR 进制为12小时 HOUR_OF_DAY 为24小时int minute = mCalendar.get(Calendar.MINUTE);//分钟int second = mCalendar.get(Calendar.SECOND) + 1;//秒数if (second == 60) {minute += 1;second = 0;}if (minute == 60){hour += 1;minute = 0;}if (hour == 12){hour = 0;}@SuppressLint("DefaultLocale") String time = String.format("%d:%02d:%02d", hour, minute, second);mCalendar.set(Calendar.SECOND, second);mCalendar.set(Calendar.MINUTE, minute);mCalendar.set(Calendar.HOUR_OF_DAY, hour);Message message=new Message();message.what=0;message.obj=time;mHandler.sendMessage(message);}},0,1000);}@SuppressLint("HandlerLeak")Handler mHandler=new Handler(){@Overridepublic void handleMessage(Message msg) {Log.v("Timer","handleMessage()..");super.handleMessage(msg);String str=(String)msg.obj;tvTime.setText(str);}};@Overrideprotected void onDestroy() {super.onDestroy();if(timer!=null){timer.cancel();//关闭timer}
这样就写完了,是不是非常简单,礼轻情意重,快去跟你爱的人说声生日快乐吧。
总结
礼物虽简易,但人情亦珍贵,好好珍惜眼前人。