热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[ReactNativeDevelopment]CampingSpotsFinder应用程序用户界面克隆第一部分地图视图用户界面...

本教程的灵感来自房地产模板,该模板使我们能够构建功能齐全的,随时可以部署的移动应用程序,任何人都可以用来构建自己的ReactNative应

本教程的灵感来自房地产模板,该模板使我们能够构建功能齐全的,随时可以部署的移动应用程序,任何人都可以用来构建自己的React Native应用程序。 本教程从React UI Kit的Camping Spots Finder应用程序克隆的Youtube视频教程中复制了编码实现和设计。 该视频教程具有快速编码和快速实现的功能,这对于初学者来说可能很难理解。 因此,本教程系列将视频分为不同的部分。 它还提供了分步指南,任何人都可以轻松掌握和实现自己的应用程序。

在本教程系列的第一部分中,我们将实现地图以及设置标题和标题选项卡,这些将为整个应用程序UI创建基础。 这个想法是,首先要实现地图视图,然后是将所有部分分成不同功能的标题部分。

所以,让我们开始吧!

在本教程中,我们将使用EXPO作为React Native项目开发依赖项。 因此,首先,我们将使用expo客户端创建样板React Native应用程序。

创建样板React Native项目

首先,由于我们将使用expo作为开发引擎,因此需要将其安装到系统中。 要将expo全局安装到我们的系统中,我们需要首先安装Node Package Manager(NPM)。 然后,我们需要运行以下命令:

npm install -g expo

现在,我们需要使用expo创建样板React本机应用程序。 为此,我们需要在所需的项目目录中运行以下命令:

expo init // project name==> Camping Spots Finder

运行上述命令后,将要求我们选择样板应用程序的模板。 在这里,我们将选择t ** abs **模板,该模板具有几个示例屏幕和已配置的react-navigation。 下面提供了选择屏幕截图:

如我们所见,我们选择选项卡模板,然后按Enter。 然后,我们需要输入项目名称,然后,将样板React本机应用程序配置到我们的目录中。

现在,我们需要输入项目目录,然后运行命令:

expo start

然后,我们将在模拟器屏幕中获得以下样板应用程序:

配置导航文件

我们已经在我们的项目中设置了用于导航目的的导航器。 但是现在,我们需要根据应用程序的要求配置导航器和导航文件。

因此,首先,我们需要在项目的“ / navigations”目录中创建一个ScreensNavigator.js文件。 然后,我们需要在项目的“ / screens”目录中创建一个Campings.js文件和Settings.js文件。 现在,我们的项目结构如下图所示:

现在,我们需要从HomeScreen.js并将其粘贴到Campings.js文件中。 同样,我们需要从SettingsScreen.jsSettings.js Screen进行相同的操作,以便该项目现在可以在模拟器中正确运行。

现在,在ScreensNavigator.js文件中,我们需要配置导航器,包括“露营”和“设置”屏幕。 为此,我们需要使用react-navigation包中的createStackNavigator方法创建一个堆栈导航器,如下面的代码片段所示:

import React from 'react' ;
import { createStackNavigator } from 'react-navigation' ;import Campings from '../screens/Campings' ;
import Settings from '../screens/Settings' ;export default createStackNavigator({Campings : Campings,Settings : Settings,
});

在这里,我们已经将AppNavigator.js文件配置为我们的项目文件。 但是,我们需要使用新的ScreensNavigator重新配置AppNavigator.js文件。 为此,我们需要配置主AppNavigator.js文件,如下面的代码片段所示:

import React from 'react' ;
import { createAppContainer, createSwitchNavigator } from 'react-navigation' ;import ScreensNavigator from './ScreensNavigator' ;export default createAppContainer(createSwitchNavigator({Main : ScreensNavigator,
}));

现在,如果我们在模拟器中重新运行项目,则将获得与以前相同的屏幕。

在Camping.js中创建地图视图

在这一步中,我们将为Camping.js文件中的React Native Camping Spots Finder克隆创建一个Map视图。 为此,我们将使用为我们提供MapView组件的react-native-maps包。

首先,我们需要从Camping.js中删除所有代码。 然后,我们将从React和react-native包中导入所有必需的组件,如下面的代码片段所示:

import React from 'react' ;
import {Image,Platform,ScrollView,StyleSheet,Text,TouchableOpacity,View,
} from 'react-native' ;

现在,我们需要使用以下命令将react-native-maps软件包安装到我们的项目中:

expo install react-native-maps

接下来,我们需要将react-native-maps包导入到Camping.js文件中,如下所示:

import MapView from 'react-native-maps' ;

现在,为了将地图包含到“露营”屏幕中,我们需要使用react-native-package提供的MapView组件,如下面的代码片段所示:

class Campings extends React . Component {render(){return (style = {styles.container} > );}
}

在这里,我们将MapView组件绑定到某些样式以及initialRegion道具。 initialRegion属性使我们可以设置地图位置配置,如上面的代码片段所示。 为了将地图正确放置,有几个View组件和一个ScrollView组件,它们用一些样式包装了MapView。 以下代码段提供了所需的样式:

const styles = StyleSheet.create({container : {flex : 1 ,backgroundColor : '#fff' ,},map :{flex : 1},contentContainer : {paddingTop : 30 ,},
});

因此,我们在模拟器屏幕上得到以下结果:

配置地图样式

为了在屏幕上正确显示地图,我们将使用react-native软件包提供的Dimensions组件。 通过使用Dimensions组件,我们可以获得整个应用程序屏幕的高度和宽度。 然后,我们可以使用MapView对其进行配置,以在屏幕上正确显示Map。 现在,让我们按如下所示导入尺寸:

import {Image,Platform,ScrollView,StyleSheet,Text,TouchableOpacity,View,Dimensions
} from 'react-native' ;

现在,我们需要使用Dimensions组件中的get方法将高度和宽度常量设置为屏幕尺寸:

const { width, height } = Dimensions.get( 'screen' );

接下来,我们需要在MapView组件中添加高度和宽度尺寸,以便在屏幕上正确配置它。 下面的代码段提供了执行此操作的代码:

flex : 1 , height : height * 0.5 , width}} initialRegion={{latitude : 37.78825 ,longitude : -122.4324 ,latitudeDelta : 0.0922 ,longitudeDelta : 0.0421 ,}}
/>

因此,我们在模拟器屏幕上得到以下结果:

如我们所见,我们已经在Camping应用程序屏幕中成功实现了地图视图。 现在,我们将向Camping应用程序屏幕添加自定义标题。

实施标头部分

在本节中,我们将在MapView组件的顶部实现Header。 标头将包含“露营地”位置名称,右侧带有“设置”按钮。

但是首先,我们需要删除顶部的默认标题栏。 为此,我们需要在Campings.js文件中添加以下代码:

class Campings extends React . Component {static navigationOptions = {header : null ,};

在导航器堆栈提供的navigationOptions中将标头值设置为null时,顶部的默认标头消失。 结果显示在下面的模拟器屏幕截图中:

如我们所见,默认标题消失了。 现在,我们将实现我们的自定义标题栏。

创建自定义标题

在这里,我们将实现Campings Spot Finder应用程序克隆的标头部分。 标题部分包含一些图标。 因此,对于图标,我们使用以下代码导入expo包本身提供的矢量图标:

import { FontAwesome , Ionicons} from '@expo/vector-icons' ;

在这里,我们将从expo包提供的vector-icons包中导入FontAwesome图标包和Ionicons图标包。

现在,我们将创建一个名为renderHeader()的函数,该函数返回模板。 下面的代码段提供了实现此功能的代码:

renderHeader() {return (style = {styles.header} > Detected LocationNorthern Islands () )
}

在上面的代码段中,我们添加了一些Text组件和由View组件包装的图标。 然后,我们需要在我们的render()函数中调用therenderHeader()函数,如下面的代码片段所示:

render(){return (style = {styles.container} > {this.renderHeader()} //here

因此,我们将在模拟器屏幕中获得以下结果:

如我们所见,标头部分位于MapView的顶部,但看起来并不吸引人。 因此,我们需要为其添加一些样式,以使其看起来像“露营点查找器”应用程序一样酷。

向标题添加样式和配置

在这里,我们将向标头部分添加一些样式配置,以使其看起来更具吸引力。 为了做到这一点,我们将使用许多样式绑定。 这里使用了本机样式的flex属性。 因此,我们可以深入了解如何使用flex属性。 因此,下面的代码片段中提供了实现此目的的代码:

renderHeader() {return (style = {styles.header} > Detected LocationNorthern Islands)}

在上面的代码段中,设置Icon组件由TouchableOpacity组件包装,以使其可单击。 然后,使用内联以及来自样式表的不同样式绑定,以使标头部分具有适当的外观。 下面的代码段提供了此部分的样式:

header: {flex : 1 ,flexDirection : 'row' ,alignItems : 'center' ,justifyContent : 'center' ,height : height * 0.15 ,paddingHorizontal : 14 ,},location : {height : 24 ,width : 24 ,borderRadius : 14 ,alignItems : 'center' ,justifyContent : 'center' ,backgroundColor : '#FF7657' ,},settings : {alignItems : 'center' ,justifyContent : 'center' ,},options : {flex : 1 ,paddingHorizontal : 14 ,},

结果,我们在模拟器屏幕中得到以下结果:

如我们所见,标题部分现在看起来很酷,并且很吸引人,左侧是导航箭头图标,右侧是设置图标。 它用于显示实际应用中检测到的位置名称。

在这里,我们在renderHeader()函数中创建了标头部分,该函数返回标头部分模板。 这使我们项目的render()方法中的代码看起来更加清晰。 因此,让我们实现MapView以及将要以函数样式实现的其他部分。

将UI部分划分为功能

这只是中间步骤,我们将把不同UI部分的编码实现分成功能,以使render方法的代码更少。 这将帮助我们更好地理解和阅读代码。 render()方法将变得干净,清除所有混合为一个的编码段。 因此,让我们完成这项工作。

首先,我们将MapView的代码移至renderMap()函数,如下面的代码片段所示:

renderMap(){return (style = {styles.map} > )
}

现在,renderMap()方法将返回MapView组件模板。

然后,在接下来的教程中,我们将实现map组件下方的List部分。 但是,首先让我们为该部分创建一个名为renderList()函数的单独函数,该函数返回list部分的模板。 该功能在下面的代码片段中提供:

renderList(){return ( List of camping site here )}

在这里,我刚刚在View组件中添加了Text元素,我们将在本教程的下一部分中对其进行配置。

现在,我们需要将这些函数调用到项目的render()方法上,如下面的代码片段所示:

render(){return (style = {styles.container} > {this.renderHeader()} //for header section{this.renderMap()} //for MapView section{this.renderList()} //for List section );
}

因此,我们将在模拟器屏幕中获得以下结果:

如我们所见,我们在屏幕上正确显示了所有三个部分。

但是,对于本部分的教程,我们尚未完成。 我们将在标题部分和MapView部分之间再添加一个标题标签部分。

实施选项卡部分

在此步骤中,我们将在原标题中添加选项卡按钮,如在原始Campings Spot Finder应用程序中所见。 为此,我们将创建另一个函数,该函数返回tabs部分的模板。 该函数名为renderTabs(),其实现在以下代码段中提供:

renderTabs(){return ( All SpotsTentingRV Camping )
}

在这里,我们添加了一些由View组件包装的Text元素。 然后,我们还需要在render()函数中调用renderTabs()函数:

render(){return (style = {styles.container} > {this.renderHeader()} //for header section {this.renderTabs()} //for tabs section{this.renderMap()} //for MapView section{this.renderList()} //for List section );}

因此,我们在模拟器屏幕上得到以下结果:

如我们所见,标头和​​MapView部分之间有一部分,但看起来不像标签。 为了使其看起来像一个选项卡,我们需要向其添加一些样式和配置。

在“标签”部分添加样式和配置

在这里,我们将样式配置添加到选项卡部分,以使其看起来像选项卡。 为此,我们需要使用不同的样式绑定,包括flex属性。 填充和字体属性。 下面的代码段提供了实现此目的的代码:

renderTabs(){return (style = {styles.tabs} > All SpotsTentingRV Camping )
}

因此,如下面的模拟器屏幕截图所示,我们获得的标签的外观比以前更具吸引力:

如我们所见,我们在标题和地图部分之间找到了标签。 现在,我们需要添加活动的标签样式以及用于处理标签的活动样式的配置。

配置活动标签

在这里,我们将添加用于确定活动标签的编码实现。 首先,我们需要一个名为active的状态来处理活动的标签样式属性,如下面的代码片段所示:

state = {active : 'all'
}

现在,我们需要创建一个函数来处理更改和状态,并在单击时将活动样式设置为正确的选项卡。 为此,我们将创建一个名为handleTab()的函数,该函数将制表符值作为参数,并在触发时将活动状态设置为制表符值。 下面的代码段提供了该函数的编码实现:

handleTab =( tabKey ) => {this .setState({ active : tabKey });}

现在,我们需要为活动选项卡定义一些样式。 然后,需要将此样式配置绑定到renderTabs()函数内的选项卡部分模板中的Text和View上。 下面的代码段提供了活动选项卡所需的样式:

activeTab: {borderBottomColor : '#FF7657' ,},activeTabTitle : {color : '#FF7657' ,},

上面给出的样式将为活动选项卡的文本提供颜色,以及将活动选项卡围在底部的边框的View组件。

现在,我们需要包括这些样式,并将其包含到renderTabs()函数中,该函数的值取决于选项卡的活动状态。 然后,我们还需要将handleTab()函数绑定到选项卡的Text组件的onPress事件。 函数调用还应根据选定的活动选项卡将参数设置为函数。 下面的代码段提供了实现所有这些功能的代码:

renderTabs(){const {active} = this .statereturn (style = {styles.tabs} > this.handleTab('all')}>All Spots this.handleTab('tent')}>Tenting this.handleTab('rv')}>RV Camping )}

因此,我们将在模拟器屏幕中获得以下结果:

最后,我们在Camping Spots Finder应用程序克隆教程系列的这一部分中成功实现了标题部分,标题选项卡部分和MapView部分。

结论

这是我们的系列教程的第一部分,用于克隆Camping Spots Finder应用程序UI。 在本教程的一部分中,我们首先学习了如何使用expo设置样板React本地应用程序项目。 然后,我们学习了如何配置导航器和屏幕,以准备应用程序UI。 之后,我们逐步指导了如何使用react-native-maps包,带有图标的标题部分和具有活动标签样式的标题标签部分来实现MapView。 我们还获得了有关如何将UI部分分离为不同功能的奖励指南,这些功能可返回所需模板以使代码清晰。 本教程系列的第一部分有点长,但是我们必须学习更多的知识,并为以后的部分设置基本的UI,这将使本系列更容易掌握和实现。

在下一部分中,我们将实现在本教程前面的列表部分,我们将其分成一个函数,并设置到设置屏幕的导航。

因此,敬请关注!!

揭露

这篇文章包括会员链接; 如果您通过本文提供的不同链接购买产品或服务,我可能会获得赔偿。

带有“ React Native#1:地图视图” UI的Camping Spots Finder应用程序UI克隆首先出现在Kriss上 。

翻译自: https://hackernoon.com/camping-spots-finder-app-ui-clone-with-react-native-1-map-view-ui-8muy303x




推荐阅读
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
郭先2502898821_918
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有