阅读 357

安卓开发之星座查询

星座查询

目标:

创建一个 Android 项目,实现星座查询功能,功能要求如下:

  1. 该应用由 2 个界面组成,分别为星座查询主界面(如图 1 所示)、查询结果界面(如图 4所示)。

  2. 在图 1 界面中设置生日输入框不能进行输入,只能点击弹出日期对话框进行选择(如图3 所示),并将选择的日期显示在生日框中(如图 2 所示)。

  3. 在图 1 界面中输入姓名、选择出生日期后,点击“查询星座”按钮能够跳转到查询结果界面(如图 4 所示)。

  4. 若图 1 界面中的生日为空,则点击“查询星座”按钮时使用 Toast 给出提示信息“出生日期为空,请选择您的生日!”

  5. 在图 4 界面中,显示在图 1 界面中输入的姓名和出生日期,并根据出生日期计算出所属星座,在图 4 界面中显示出该星座对应的星座图片和星座特点的描述(读文件file1~file12),同时将图 4 界面的标题设置为该星座的名称。

image-20211010152429394

素材:

image-20211010143211587

实现:

通过上述的要求,我们可以确定的的思路:

通过设计要求,我们需要两个页面实现跳转,第一个主页面需要包含姓名和出生日期,通过点击事件将该信息传递到第二个页面,通过对出生日期的对比,找到符合的内容(图片和文字描述)等。

OnePage:

首先我们先实现第一个页面,

image-20211010143257528

拆分布局,红色边框框住的都是TextView,基本没什么好说的,主要是下面生日输入框,这里我们采用的日历选择方式。

如图所示:

image-20211010152336214

首先我们需要设置下生日输入框的属性:

android:focusable="false"

通过设置,取消输入框的获取焦点的功能,然后给他绑定一个点击事件:

android:onClick="showCalendar"

这时候进入主方法区(MainActivity),new一个DatePickerDialog,重写里面的onDateSet方法,实现日期选择器:

//点击实现弹出一个日期选择器//定义一个日期选择器Calendar calendar = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(MainActivity3.this, new DatePickerDialog.OnDateSetListener() {    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {        //用户选定日期后,将选定的日期再Editext中显示,
        MainActivity3.this.date = year+"-"+(month+1)+"-"+day;
        System.out.println(MainActivity3.this.date);
        EditText et_birthdat = findViewById(R.id.eCalendar);
        et_birthdat.setText(MainActivity3.this.date);
    }
},calendar.get(Calendar.YEAR) , calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
dialog.show();  //显示日期

这里日期选择的是Calendar类,Java原来的Date类,在JDK9已经被废弃了。

根据我们刚开始的分析的,第二个页面需要两个数据,名字和生日,这里我把这两个属性封装成对象传递:

package com.example.homework3.user;import java.io.Serializable;//getter、setter、toString自己添加public class User  implements Serializable {    private  String name;    private  String birthday;
}

注意这里的对象需要序列化,这是因为在传递的时候putExtra需要的

@NonNullpublic Intent putExtra(String name, @Nullable Serializable value) {    throw new RuntimeException("Stub!");
}

属性封装好了以后在点击Button触发点击事件,实现数据传递。

这里做了一下处理:当日期的数据为空的话,则使用Toast实现提醒并不跳转。

if(date == null){
    Toast.makeText(MainActivity3.this,"出生日期为空,清选择您的生日",Toast.LENGTH_SHORT).show();    return;
}

TwoPage:

先看页面:

image-20211010145014100

从标题、用户名、出生日期和星座特点都是由第一页传递的数据显示的。

所以我们需要动态的处理数据。

先获取信息,设置姓名 出生日期等信息:

Intent intent = getIntent();
User user = (User) intent.getSerializableExtra("user");
TextView Tname = findViewById(R.id.Tname);
TextView Tbirthday = findViewById(R.id.Tbirthday);
String name = user.getName();
String birthday = user.getBirthday();//设置姓名和日期Tname.append(" " + name);
Tbirthday.append(" " + birthday);

接下来对日期的处理来获得相应的数据。

提取了names,days,imgs,fileNames多个数组,星座名称,对应开始日,星座图片,星座文件等;

以days[]来说,处理成以下格式:

int[] days = {0,20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};

补零方便后续的下标计算方便;

处理日期和标题的设置:

//获取月份和日期int month = Integer.parseInt(strings[1]);int day = Integer.parseInt(strings[2]);int idx = -1;//7 days[7] == 23, idx =if(day < days[month]) idx = month-1;else idx = month;if(idx == 0) idx = days.length-1;//设置标题setTitle(names[idx]);

设置星座图片:

//设置星座图片ImageView img = findViewById(R.id.imageView);
img.setImageResource(imgs[idx]);
TextView signText = findViewById(R.id.sign);
signText.setText("您的星座是:"+names[idx]+"特点如下:");

星座特点的处理在不同的文件是不同的,这里是Assets文件夹的处理。

//设置星座特点try {
    String text = readFromeAssets(fileNames[idx]);
    TextView textview = findViewById(R.id.textShow);
    textview.setText(text);
} catch (IOException e) {
    e.printStackTrace();
}

对应方法:

//读文件public  String readFromeAssets(String sid) throws IOException {
    InputStream open = getResources().getAssets().open(sid);    byte[] buffer = new byte[open.available()];
    open.read(buffer);
    String s = new String(buffer,"gbk");
    open.close();    return s;
}

最后效果图:

image-20211010152429394

原来想传GIF的,但是Gitee好像把它和谐了,只能放图片了。如果想获取素材和代码可以评论留言。

结束:

如果你看到这里或者正好对你有所帮助,希望能点个????或者⭐感谢;

有错误的地方,欢迎在评论指出,作者看到会进行修改。

来源https://www.cnblogs.com/xbhog/p/15389599.html

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐