创建主界面MainActivity.java

创建新的Empty Activity后在MainActivity.java文件中生成三段默认代码,分别是package(所创建的应用程序包),import(导入的库),protect void onCreate(主要界面)。

其中import在后续代码编写的过程中可以根据提示使用alt+enter自动创建,无需手动输入;onCreate比较重要,在onCreate层次下,会包含activity_main.xml文件中的UI设计,以及创建在界面中的一些数据库如vedioDataList等等。

package com.example.whyme; //默认//导入包import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;import com.example.whyme.adapter.MerchandiseAdapter;
import com.example.whyme.adapter.VedioAdapter;
import com.example.whyme.model.MerchandiseData;
import com.example.whyme.model.VedioData;import java.util.ArrayList;
import java.util.List;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

创建主界面布局文件activity_main.xml

1.框架

首先需在MainActivity后删除>/输入>,添加代码行

</androidx.constraintlayout.widget.ConstraintLayout>

使框架结构完整,后续布局操作均在两处</androidx.constraintlayout.widget.ConstraintLayout>内进行,我们称之为框架a。

接下来再框架a中创建新的空框架b,在Design界面调整其大小,为首页的背景处理做准备。我们需要明白,框架与其他内置元素如(文本text,图像image)的区别是:在框架上可以无限添加元素,重叠显示,而元素只能够独立存在于界面中,不可相互重叠,并且框架可以从background处添加背景。

所以,当我们需要添加两个重叠图像时,也可以添加一个background再添加一个image。注意:需重叠显示的元素需写在框架b内,不需重叠显示的元素则写在框架b外,框架a内。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"android:background="#F5F7F7"tools:context=".MainActivity"><androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/constraintLayout"android:layout_width="0dp"android:layout_height="220dp"android:background="@drawable/first_bg"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"></androidx.constraintlayout.widget.ConstraintLayout></androidx.constraintlayout.widget.ConstraintLayout>

2.内置元素

最常用的两种内置元素是:文本TextView,图像ImageView。

<TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="32dp"android:fontFamily="@font/rubik"android:text="For E"android:textColor="#FFFFFF"android:textSize="18sp"app:layout_constraintStart_toStartOf="@+id/imageView5"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:id="@+id/imageView2"android:layout_width="64dp"android:layout_height="64dp"android:layout_marginTop="8dp"android:layout_marginEnd="32dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="@+id/textView"app:srcCompat="@drawable/head_e" />

3.搜索栏(可编辑文本)

设置方法:搜索ed选择plain text,在app文件下创建new Android resource file,resource type选择drawable,来创建搜索框的背景文件search_bg.xml。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><gradient android:startColor="#FFFFFF"android:endColor="#FFFFFF"/><corners android:radius="8dp"/></shape>

选择plain text 设置背景background为search_bg;在app 新建new vector asset可以创建新图标,选择搜索图标导入;在背景框的drawableleft处设置为搜索图标;选中图标,在padd处设置相关位置参数。

4.循环数据库界面Recycler View

(1)VedioData.java文件

在MainActivity所属文件夹下创建新的package,命名为model,在model下创新新的java class,命名为VedioData,专门存放Vedio的数据类。

首先定义各个元素类型,其中String定义字符串类型,Integer定义图像类型; 设置公有类VedioData,指定各元素this.vedioName=vedioName;public string getxxx+public void setxxx初始化各元素。

package com.example.whyme.model;public class VedioData {// 定义单个类元素类型String vedioName;String typeName;String programName;Integer imageUrl;public Integer getImageUrl() {return imageUrl;}public void setImageUrl(Integer imageUrl) {this.imageUrl = imageUrl;}public VedioData(String vedioName, String typeName, String programName, Integer imageUrl) {this.vedioName = vedioName;this.typeName = typeName;this.programName = programName;this.imageUrl = imageUrl;}public String getVedioName() {return vedioName;}public void setVedioName(String vedioName) {this.vedioName = vedioName;}public String getTypeName() {return typeName;}public void setTypeName(String typeName) {this.typeName = typeName;}public String getProgramName() {return programName;}public void setProgramName(String programName) {this.programName = programName;}
}

(2)VedioAdapter.java文件(复杂)

在MainActivity所属文件夹下创建新的package,命名为adapter,在adapter下创新新的java class,命名为VedioAdapter,专门设置数据类的相关性能。

扩展extends RecyclerView.Adapter,在general自动创建constructor,可以可看到如下界面。

public class VedioAdapter extends RecyclerView.Adapter<>{public static final class VedioViewHolder extends RecyclerView.ViewHolder{public VedioViewHolder(@NonNull View itemView) {super(itemView);}}
}

首先创建Context和List<VedioData>;在class栏补全public class VedioAdapter extends RecyclerView.Adapter<VedioAdapter.VedioViewHolder> ,选择自动创建三类Implement,分别是

public VedioViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)

该项负责导入xml布局文件

public void onBindViewHolder(@NonNull VedioViewHolder holder, int position) 

该项负责固定各元素的布局位置

public int getItemCount() 

该项获取元素,一般无需编辑

package com.example.whyme.adapter;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import com.example.whyme.R;
import com.example.whyme.model.VedioData;import java.util.List;public class VedioAdapter extends RecyclerView.Adapter<VedioAdapter.VedioViewHolder> {Context context;List<VedioData> vedioDataList;public VedioAdapter(Context context, List<VedioData> vedioDataList) {this.context = context;this.vedioDataList = vedioDataList;}@NonNull@Overridepublic VedioViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.vedio_row_item, parent, false);return new VedioViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull VedioViewHolder holder, int position) {holder.vedioName.setText(vedioDataList.get(position).getVedioName());holder.typeName.setText(vedioDataList.get(position).getTypeName());holder.programName.setText(vedioDataList.get(position).getProgramName());holder.vedioImage.setImageResource(vedioDataList.get(position).getImageUrl());}@Overridepublic int getItemCount() {return vedioDataList.size();}public static final class VedioViewHolder extends RecyclerView.ViewHolder{ImageView vedioImage;TextView vedioName, typeName, programName;public VedioViewHolder(@NonNull View itemView) {super(itemView);vedioImage = itemView.findViewById(R.id.vedio_image);vedioName = itemView.findViewById(R.id.vedio_name);typeName = itemView.findViewById(R.id.type_name);programName = itemView.findViewById(R.id.program_name);}}
}

5.Activity之间的跳转

下次再写

AndroidStudio 简单又高级的APP项目相关推荐

  1. Android开发高级进阶内涵段子APP项目实战视频教程

    Android开发高级进阶内涵段子APP项目实战课程视频教程下载.本课程带你从框架入手,开启我们的Android进阶之旅,开始写一步一步完善整个项目. 项目目录: 01.Android进阶之旅与你同行 ...

  2. swift 快速奔跑的兔几 本节的内容是:音频与视频 第一说 AVFoundation 以及简单的iOS视频app

    1.AVFoundation是一个功能强大的庞大框架,能够对音频和视频执行各种复杂操作. AVFoundation被设计用来加载和播放大量流行的视听格式. AVFoundation将可以播放的媒体称为 ...

  3. (更新源码)AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示)

    AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示) 1.内容简介 2.环境配置 3.导入他人demo 4.AS项目分析 5.天气项目流程 6.数据探寻 ...

  4. App项目实战之路(二):API篇

    原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/practice/20160812 微信订阅号:keeganlee_me 写于2016- ...

  5. 浙江理工大学信息学院本科生创新项目总结报告——简单的后台用户管理项目

    信息学院本科生创新项目总结报告 研究目的与意义 基于Spring Boot框架等技术实现一个简单的后台用户管理系统项目,具有良好的用户交互体验.良好的信息反馈能力.安全防护措施,包括用户登录.用户注册 ...

  6. HTML5 APP项目展示响应式网页模板

    简介: 国外的一款APP项目展示HTML单页模板 1.该模板代码干净整洁: 2.效果相当的炫酷,相当简洁大气高端,模板简单,全部已数据调用 3.网站手工DIV+css,代码精简,首页排版整洁大方.布局 ...

  7. SSM整合APP项目

    SSM整合APP项目 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Ma ...

  8. APP项目的开发流程

    从事APP开发多年,对 APP 产品开发的流程已经再熟悉不过了,现在把这些年积累的一些经验和大家分享一下,一个产品是怎么从想法一步一步落地为具体成品的,这个过程中会经历一些怎样的必要流程呢?北京木奇移 ...

  9. Android——一个简单的记账本APP

    一个简单的记账本APP 视频效果预览 添加账目记录 效果预览 添加账目记录实现 简述 实现 获取日期 字符串时间戳转Date Date转星期 获取时间 Switch控制显示和隐藏 更改Switch样式 ...

最新文章

  1. 解决开机自检D盘问题
  2. keepalived 报错 Popt libraries is required
  3. 20162303《程序设计与数据结构》第一周学习总结
  4. linux 下实现负载均衡群集(NAT方式)
  5. Downloader Middlewares反反爬虫【学习笔记04】
  6. typedef让p去除了普通变量的C++身份
  7. 推荐第三方SQL查询工具
  8. Java核心技术点之反射
  9. Java 简单工厂模式和工厂模式(类图及实现)
  10. 电动自动吞吐式IC卡RFID读写器EMV模块HX150进卡命令
  11. 软考之软件评测师考试详解以及准备篇
  12. 【运筹学】分支定界法 ( 分支定界法相关概念 | 分支定界法求解整数规划步骤 | 分支定界理论分析 | 分支过程示例 )
  13. mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法
  14. 阿里云DTS订阅实现实时运营服务的方案及注意事项
  15. 初探 Ettercap: ARP投毒 DNS欺骗
  16. 【Linux】文件查找、权限设置以及综合应用
  17. 杭电-1878 欧拉回路
  18. C语言通过ODBC函数操作Access数据库(mdb和accdb格式)
  19. 【计算机】联想拯救者Y7000安装win10后重启一直在转圈
  20. 【数据结构】内排序小结

热门文章

  1. android路径动画学习笔记
  2. StartAllBack V3.6.3.4699 安装使用教程
  3. 0901静态网页制作DIV+CSS
  4. NTP对时器(NTP对时服务器)技术介绍
  5. 输入电阻,输出电阻,去耦电容,旁路电容
  6. i wanna be
  7. I lay my love on youI wanna stay with you forever
  8. 圆形梅花图片旋转特效
  9. html超链接悬停颜色,HTML怎么设置超链接颜色?设置超链接颜色总结
  10. 3D建模是什么?3D建模涉及哪些专业?