Vanlige React Native App Layouts Galleri Side

I denne serien lærer du hvordan du bruker React Native til å lage sidelayouter som ofte brukes i mobilapper. Oppsettene du lager, vil ikke være funksjonelle - i stedet er hovedfokuset i denne serien å få hendene skitne ved å legge ut innhold i dine React native apps. 

Hvis du er ny for å legge ut React native apps eller styling generelt, sjekk ut min tidligere opplæring:

For å følge med denne serien utfordrer jeg deg til å prøve å gjenskape hver skjerm først først, før du leser mine trinnvise instruksjoner i opplæringen. Du vil ikke ha stor nytte av denne opplæringen bare ved å lese den! Prøv først før du ser opp svarene her. Hvis du lykkes med å gjøre det som den opprinnelige skjermen, sammenligner du implementeringen din til min. Deretter bestem deg selv hvilken som er bedre!

I dette tredje innlegget i serien, vil du opprette følgende fotogalleri-side:

Gallerier brukes ofte til å vise en samling av beslektet innhold på en slik måte at kun nødvendig informasjon presenteres. Mesteparten av tiden inkluderer dette et bilde, en tittel og annen relevant informasjon.

Her er et par eksempler på at denne typen layout blir brukt i naturen:

Prosjektoppsett

Det første trinnet er selvfølgelig å sette opp et nytt React Native-prosjekt:

Reager-native init reager-native-common-skjermer

Når prosjektet er satt opp, åpner du index.android.js fil og erstatt standardkoden med følgende:

Import React, Component fra 'reagere'; importer AppRegistry fra 'react-native'; importer galleri fra './src/pages/Gallery'; eksporter standardklasse ReactNativeCommonScreens utvider komponent render () return (  );  AppRegistry.registerComponent ('ReactNativeCommonScreens', () => ReactNativeCommonScreens);

Lage en src / sider mappe og opprett en Gallery.js filen i den.

Du trenger også reagere fremmed-vektor-ikoner pakke. Dette brukes spesielt til ikonene i bunnteksten.

npm installere - lagre reaksjons-native-vektor-ikoner

Åpne android / app / build.gradle fil og legg til en referanse til pakken:

avhengigheter // resten av avhengighetene er her på toppen kompilere prosjektet (': reagere-native-vector-ikoner') // legge til dette

Gjør det samme med android / settings.gradle fil ved å legge til følgende nederst:

include ': reager-native-vector-icons' prosjektet (': react-native-vector-icons'). projectDir = ny fil (rootProject.projectDir, '... / node_modules / react-native-vector-icons / android')

Åpen android / app / src / hoved / Java / COM / reagerer-nativ-felles-skjermer / MainApplication.java og importer pakken:

importer java.util.Arrays; importer java.util.List; importer com.oblador.vectoricons.VectorIconsPackage; //Legg til dette

Til slutt, initialiser pakken: 

@Override beskyttet liste getPackages () return Arrays.asList (ny MainReactPackage (), ny VectorIconsPackage () // legg til dette); 

Opprette Galleri-siden

Ok, nå som du har forsøkt å kodes selve oppsettet (ikke fusk, ikke sant?), Vil jeg vise deg hvordan jeg bygget implementeringen min.

I motsetning til de to foregående sidene trenger gallerisiden noen bilder som skal fungere som hovedinnhold. Du kan gå til Google og søke etter bilder eller laste ned bildene fra GitHub repo. Alle bildene jeg brukte er merket for gjenbruk av deres respektive eiere, så du kan fritt bruke dem hvis du vil. Når du har bildene, lagre dem inne i src / bilder katalogen. På grunn av måten bildene skal legges ut, skal alle ha lik dimensjoner.

Begynn med å lage filen (src / sider / Gallery.js) og legg til boilerplate-koden:

Import React, Component fra 'reagere'; importer StyleSheet, View, ScrollView, Image, fra 'react-native'; importer ikonet fra 'reagere-native-vector-icons / fontAwesome'; Importer knapp fra '... / components / Button'; eksporter standard klasse Galleri utvider komponent ...

Denne siden trenger en konstruktør () funksjon hvor du definerer stiene til bildene du vil bruke. I React Native, måten du refererer til bilder som er inne i arbeidskatalogen din, er ved å kreve dem akkurat som du ville ha en JavaScript-modul. Det er også viktig å merke seg at du ikke kan ha dynamisk genererte bildestier, slik at du må levere den faktiske banen for hånden.

konstruktør (rekvisitter) super (rekvisitter); this.state = photos: [label: 'beach', src: krever ('... /images/beach.jpg'), label: 'bridge', src: require ('... /images/bridge.jpg '), label:' fields ', src: krever (' ... /images/fields.jpg '), label:' mountains ' label: 'solsikke', src: krever ('... /images/sunflower.jpg'), label: 'sunset', src: krever ('... /images/sunset.jpg'), label: ' , 'src' : krever ('... /images/pink.jpg'), label: 'skinner', src: krever ('... /images/rails.jpg'),]; 

Du trenger ikke å definere disse i staten, da verdiene ikke vil endre seg. Du kan faktisk definere disse i en egen fil, importere den, tilordne den til en variabel, og deretter bruke den direkte. Men for enkelhets skyld besluttet jeg å bare sette alt i staten.

Inne i render () Metode, du kommer til å bryte trenden med å pakke alt inn i en ScrollView komponent, fordi fanekomponenten på den nederste delen av skjermen skal ha en fast posisjon. Dette betyr at selv om bildene går over den tilgjengelige høyden, skal fanene fortsatt være på plass. For å oppnå dette, bruk a Utsikt komponent for å pakke inn alt og bare pakke inn samlingen av bilder i en ScrollView. Dette tillater deg å bruke bare rulle til beholderen i samlingen av bilder:

gjengivelse () retur (   this.renderGallery ()    ); 

Nå kan du begynne å se et mønster her. Hver gang du trenger å bruke JavaScript-kode inne i render () funksjon, bør du opprette en egen funksjon for å holde den koden, i stedet for å sette den direkte inn i render () funksjon. Dette holder det lunt og rent.

La oss nå gå videre til stylingen. Selv om a ScrollView er ikke vant til å pakke alt denne gangen, det er viktig å merke seg at du fortsatt må levere flex: 1 til hovedbeholderen slik at den forbruker hele ledig plass.

container: flex: 1, flexDirection: 'kolonne', galleri: flexDirection: 'kolonne', faner: flexDirection: 'row', backgroundColor:' # 333 ', polstring: 20 1, ikon: textAlign: 'center',

De renderGallery () funksjonen er veldig lik den renderWeeks () funksjon som vi brukte i den forrige opplæringen, som vi pleide å gjengi en kalenderside. Hvis du vil ha en oppdatering på hvordan det fungerer, kan du lese og lese den forrige veiledningen på kalenderen. Det du trenger å vite er det resizeMode brukes til Bilde. I dette tilfellet er det satt til dekke, som gjør bildet okkupert hele ledig plass i beholderen, samtidig som bildet opprettholdes. Dette resulterer i at bildet blir litt oppblåst for enheter med større skjermer hvis det opprinnelige bildet er mindre. 

renderGallery () var count = 0; var previous_item = "; var par = this.getPairsArray (this.state.photos); returner par.map ((item, index) => return (     ); ); 

Her er getPairsArray () funksjon:

getPairsArray (bilder) var pairs_r = []; var par = []; var teller = 0; photos.forEach ((item) => count + = 1; pairs.push (element); hvis (telle == 2) pairs_r.push (pairs) count = 0; pairs = [];); returnerer par_r; 


Endelig er her stylingen for hver rad (punkt) og bilde (bilde). Legg merke til bruken av flex: 1 på selve bildet. Dette er gjort fordi Bilde komponenten i seg selv er sin egen beholder. Du vil at beholderen selv skal okkupere halvparten av ledig plass for hver rad - det er derfor a flex eiendom skal tildeles Hvis dette ikke er gjort, vil bare dimensjonene som kreves av bildet bli brukt, og resizeMode som du la til tidligere, vil ikke engang ha en effekt.

element: flex: 1, flexDirection: 'row',, foto: flex: 1

Konklusjon

Det er det! I denne opplæringen lærte du hvordan du implementerer oppsettet for en galleriside. Vi fokuserte på hvordan vi skal håndtere bilder når det gjelder å legge ut dine React native apps. Ofte må du bruke en kombinasjon av flex og resizeMode for å gjøre bilder flyt slik du vil at de skal. Hvordan sammenlignet min løsning med din egen? Gi oss beskjed i diskusjonsforumet nedenfor.

I en kommende opplæring lærer du hvordan du implementerer layouten som ofte brukes i nyhetsprogrammer. I mellomtiden kan du se noen av våre andre opplæringsprogrammer på React Native og Flexbox!

  • En introduksjon til CSS Flexbox-modulen

    CSS, til tross for det relativt lave oppfattede ferdighetsloftet, ser alltid ut til å ha en morderfunksjon opp i ermet. Husk hvordan mediesøk gjøres responsive ...
    Umar Hansa
    HTML og CSS
  • Kom i gang med React Native Layouts

    I denne opplæringen lærer du hvordan du legger ut React native apps og hvordan du implementerer layouter som ofte brukes i apper.
    Wern Ancheta
    Reager Native
  • Bygg en sosial app med React Native

    React native, laget av Facebook, lar deg skrive innfødte mobilapper i moderne JavaScript. Reakt Native apps blir forvandlet til innfødte visningsspesifikke ...
    Markus Mühlberger
    Reager Native
  • Hvordan bygge en stripet navigasjon med Flexbox

    Er du ute etter å forbedre din fleksibilitets kunnskap og samtidig lære å bygge lett en attraktiv og unik layout? I så fall må du lese dette ...
    George Martsoukos
    flexbox
  • Animer React Native App

    Animasjoner kan puste livet inn i appen din og gjøre brukergrensesnittene dine mer intuitive. I denne opplæringen lærer du hvordan du implementerer ulike typer animasjoner i ...
    Wern Ancheta
    Reager Native
  • Slik oppretter du en ansiktsgjenkjenningsapp med React Native

    Er du en hybrid app-utvikler som vil inkludere ansiktsgjenkjenning i appen din, men du har ingen anelse om hvor du skal begynne? Som en start kunne du lese An ...
    Wern Ancheta
    Reager Native