AndroidStudio 简单又高级的APP项目
创建主界面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项目相关推荐
- Android开发高级进阶内涵段子APP项目实战视频教程
Android开发高级进阶内涵段子APP项目实战课程视频教程下载.本课程带你从框架入手,开启我们的Android进阶之旅,开始写一步一步完善整个项目. 项目目录: 01.Android进阶之旅与你同行 ...
- swift 快速奔跑的兔几 本节的内容是:音频与视频 第一说 AVFoundation 以及简单的iOS视频app
1.AVFoundation是一个功能强大的庞大框架,能够对音频和视频执行各种复杂操作. AVFoundation被设计用来加载和播放大量流行的视听格式. AVFoundation将可以播放的媒体称为 ...
- (更新源码)AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示)
AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示) 1.内容简介 2.环境配置 3.导入他人demo 4.AS项目分析 5.天气项目流程 6.数据探寻 ...
- App项目实战之路(二):API篇
原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/practice/20160812 微信订阅号:keeganlee_me 写于2016- ...
- 浙江理工大学信息学院本科生创新项目总结报告——简单的后台用户管理项目
信息学院本科生创新项目总结报告 研究目的与意义 基于Spring Boot框架等技术实现一个简单的后台用户管理系统项目,具有良好的用户交互体验.良好的信息反馈能力.安全防护措施,包括用户登录.用户注册 ...
- HTML5 APP项目展示响应式网页模板
简介: 国外的一款APP项目展示HTML单页模板 1.该模板代码干净整洁: 2.效果相当的炫酷,相当简洁大气高端,模板简单,全部已数据调用 3.网站手工DIV+css,代码精简,首页排版整洁大方.布局 ...
- SSM整合APP项目
SSM整合APP项目 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Ma ...
- APP项目的开发流程
从事APP开发多年,对 APP 产品开发的流程已经再熟悉不过了,现在把这些年积累的一些经验和大家分享一下,一个产品是怎么从想法一步一步落地为具体成品的,这个过程中会经历一些怎样的必要流程呢?北京木奇移 ...
- Android——一个简单的记账本APP
一个简单的记账本APP 视频效果预览 添加账目记录 效果预览 添加账目记录实现 简述 实现 获取日期 字符串时间戳转Date Date转星期 获取时间 Switch控制显示和隐藏 更改Switch样式 ...
最新文章
- 解决开机自检D盘问题
- keepalived 报错 Popt libraries is required
- 20162303《程序设计与数据结构》第一周学习总结
- linux 下实现负载均衡群集(NAT方式)
- Downloader Middlewares反反爬虫【学习笔记04】
- typedef让p去除了普通变量的C++身份
- 推荐第三方SQL查询工具
- Java核心技术点之反射
- Java 简单工厂模式和工厂模式(类图及实现)
- 电动自动吞吐式IC卡RFID读写器EMV模块HX150进卡命令
- 软考之软件评测师考试详解以及准备篇
- 【运筹学】分支定界法 ( 分支定界法相关概念 | 分支定界法求解整数规划步骤 | 分支定界理论分析 | 分支过程示例 )
- mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法
- 阿里云DTS订阅实现实时运营服务的方案及注意事项
- 初探 Ettercap: ARP投毒 DNS欺骗
- 【Linux】文件查找、权限设置以及综合应用
- 杭电-1878 欧拉回路
- C语言通过ODBC函数操作Access数据库(mdb和accdb格式)
- 【计算机】联想拯救者Y7000安装win10后重启一直在转圈
- 【数据结构】内排序小结