Layout di app nativi di Common React Pagina Galleria

In questa serie, stai imparando come utilizzare React Native per creare layout di pagina comunemente usati nelle app mobili. I layout che stai creando non saranno funzionali, invece, l'obiettivo principale di questa serie è quello di sporcarti le mani nel disporre i contenuti nelle tue app React Native. 

Se sei nuovo nello sviluppo di app o stili React Native in generale, consulta il mio precedente tutorial:

Per seguire questa serie, ti sfido a provare a ricreare ogni schermo da solo, prima di leggere le mie istruzioni passo passo nel tutorial. Non trarrai molto beneficio da questo tutorial solo leggendolo! Prova prima prima di cercare le risposte qui. Se riesci a renderlo simile alla schermata originale, confronta la tua implementazione con la mia. Quindi decidi tu stesso quale è meglio!

In questo terzo post della serie, creerai la seguente pagina della galleria fotografica:

Le gallerie sono spesso utilizzate per visualizzare una raccolta di contenuti correlati in modo tale da presentare solo le informazioni necessarie. Il più delle volte questo include una foto, un titolo e altre informazioni pertinenti.

Ecco alcuni esempi di questo tipo di layout utilizzato in natura:

Impostazione del progetto

Il primo passo, ovviamente, è quello di creare un nuovo progetto React Native:

reagire-native init react-native-common-screens

Una volta impostato il progetto, apri il index.android.js file e sostituire il codice predefinito con il seguente:

import React, Component da 'react'; importare AppRegistry da 'react-native'; importare la galleria da './src/pages/Gallery'; Esporta la classe predefinita ReactNativeCommonScreens estende Component render () return (  );  AppRegistry.registerComponent ('ReactNativeCommonScreens', () => ReactNativeCommonScreens);

Creare un src / pagine cartella e creare a Gallery.js file al suo interno.

Avrai anche bisogno del reagiscono-nativo-vector-icons pacchetto. Questo è specificamente utilizzato per le icone nel footer.

npm install --save react-native-vector-icons

Apri il Android / app / build.gradle file e aggiungi un riferimento al pacchetto:

dipendenze // resto delle dipendenze sono qui nel progetto di compilazione più in alto (': react-native-vector-icons') // aggiungi questo

Fai lo stesso con il Android / settings.gradle file aggiungendo quanto segue in basso:

include ': react-native-vector-icons' project (': react-native-vector-icons'). projectDir = new File (rootProject.projectDir, '... / node_modules / react-native-vector-icons / android')

Aperto Android / app / src / main / java / com / reagire-native-comuni-schermi / MainApplication.java e importa il pacchetto:

import java.util.Arrays; import java.util.List; import com.oblador.vectoricons.VectorIconsPackage; //Aggiungi questo

Infine, inizializza il pacchetto: 

@Override Elenco protetto getPackages () return Arrays.asList (new MainReactPackage (), nuovo VectorIconsPackage () // aggiungi questo); 

Creazione della pagina della galleria

Ok, ora che hai provato a codificare il layout da solo (no imbrogli, giusto?), Ti mostrerò come ho realizzato la mia implementazione.

A differenza delle due pagine precedenti, la pagina della galleria ha bisogno di alcune immagini che serviranno da contenuto principale. Puoi andare su Google e cercare immagini o scaricare le immagini dal repository GitHub. Tutte le immagini che ho usato sono etichettate per essere riutilizzate dai rispettivi proprietari, quindi puoi usarle liberamente se vuoi. Una volta che hai le immagini, salvale all'interno src / images directory. A causa del modo in cui verranno disposte le immagini, tutte dovrebbero avere dimensioni uguali.

Inizia creando il file (src / pages / Gallery.js) e aggiungere il codice boilerplate:

import React, Component da 'react'; import StyleSheet, View, ScrollView, Image, da 'react-native'; icona di importazione da 'react-native-vector-icons / FontAwesome'; pulsante di importazione da '... / components / Button'; Esporta la classe predefinita Galleria Estende Component ...

Questa pagina ha bisogno di a costruttore() funzione in cui si definiscono i percorsi delle immagini che si desidera utilizzare. In React Native, il modo in cui ti riferisci alle immagini che si trovano nella tua directory di lavoro è richiedendole proprio come faresti con un modulo JavaScript. È anche importante notare che non è possibile avere percorsi di immagine generati dinamicamente, quindi è necessario fornire manualmente il percorso effettivo.

costruttore (oggetti di scena) super (oggetti di scena); this.state = photos: [label: 'beach', src: require ('... /images/beach.jpg'), label: 'bridge', src: require ('... /images/bridge.jpg '), label:' fields ', src: require (' ... /images/fields.jpg '), label:' mountains ', src: require (' ... /images/mountains.jpg '), label: 'sunflower', src: require ('... /images/sunflower.jpg'), label: 'sunset', src: require ('... /images/sunset.jpg'), label: ' lake ', src: require (' ... /images/lake.jpg '), label:' nature ', src: require (' ... /images/nature.jpg '), label:' pink ', src : require ('... /images/pink.jpg'), label: 'rails', src: require ('... /images/rails.jpg'),]; 

Non è necessario definirli nello stato poiché i valori non cambieranno. È possibile definirli in un file separato, importarlo, assegnarlo a una variabile e quindi utilizzarlo direttamente. Ma per semplicità, ho deciso di mettere tutto nello stato.

Dentro il render () metodo, hai intenzione di rompere la tendenza di avvolgere tutto dentro a ScrollView componente, perché il componente tab nella parte più bassa dello schermo dovrebbe avere una posizione fissa. Ciò significa che anche se le foto superano l'altezza disponibile, le schede dovrebbero rimanere al loro posto. Per ottenere ciò, utilizzare a vista componente per avvolgere tutto e solo avvolgere la raccolta di foto in a ScrollView. Questo ti consente di applicare lo scroll solo al contenitore della raccolta di foto:

render () return (   this.renderGallery ()    ); 

Ora puoi iniziare a vedere uno schema qui. Ogni volta che è necessario utilizzare il codice JavaScript all'interno del render () funzione, dovresti creare una funzione separata per contenere quel codice, invece di metterlo direttamente dentro render () funzione. Questo lo mantiene asciutto e pulito.

Ora passiamo allo stile. Sebbene a ScrollView non è usato per avvolgere tutto questa volta, è importante notare che devi ancora fornire flex: 1 al contenitore principale in modo che consumi l'intero spazio disponibile.

contenitore: flex: 1, flexDirection: 'column', gallery: flexDirection: 'column', tabs: flexDirection: 'row', backgroundColor: '# 333', padding: 20, scheda: flex: 1, icona: textAlign: 'center',

Il renderGallery () la funzione è molto simile al renderWeeks () funzione che abbiamo usato nel tutorial precedente, che abbiamo utilizzato per il rendering di una pagina del calendario. Se vuoi un ripasso su come funziona, vai avanti e leggi il tutorial precedente sulle pagine del calendario. Quello che devi sapere è questo resizeMode è applicato al Immagine. In questo caso, è impostato su copertina, che rende l'immagine occupare l'intero spazio disponibile del suo contenitore, pur mantenendo le sue proporzioni. Questo fa sì che l'immagine si gonfia leggermente per i dispositivi con schermi più grandi se l'immagine originale è più piccola. 

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

Ecco il getPairsArray () funzione:

getPairsArray (foto) var pairs_r = []; var pairs = []; var count = 0; photos.forEach ((item) => count + = 1; pairs.push (item); if (count == 2) pairs_r.push (pairs) count = 0; pairs = [];); return pairs_r; 


Infine, ecco lo stile per ogni riga (articolo) e foto (foto). Notare l'uso di flex: 1 sulla foto reale. Questo è fatto perché il Immagine il componente stesso è il suo contenitore. Vuoi che il contenitore stesso occupi metà dello spazio disponibile per ogni riga, ecco perché a flettere la proprietà dovrebbe essere assegnata. Se questo non viene fatto, verranno consumate solo le dimensioni necessarie per la foto e il file resizeMode che hai aggiunto prima non avrà nemmeno un effetto.

articolo: flex: 1, flexDirection: 'row',, photo: flex: 1

Conclusione

Questo è tutto! In questo tutorial hai imparato come implementare il layout per una pagina della galleria. Ci siamo concentrati su come gestire le immagini quando si tratta di creare le tue app React Native. Spesso devi usare una combinazione di flettere e resizeMode per far fluire le immagini nel modo in cui le vuoi. In che modo la mia soluzione è stata paragonata alla tua? Fateci sapere nel forum di discussione qui sotto.

In un prossimo tutorial, imparerai come implementare il layout comunemente usato nelle app di notizie. Nel frattempo, dai un'occhiata ad alcuni dei nostri altri tutorial su React Native e Flexbox!

  • Un'introduzione al modulo CSS Flexbox

    Il CSS, nonostante il suo livello di competenza percepito relativamente basso, sembra sempre avere un killer nella manica. Ricorda come le query multimediali hanno reso reattivo ...
    Umar Hansa
    HTML e CSS
  • Inizia con React Native Layouts

    In questo tutorial, imparerai come disporre le app React Native e come implementare i layout comunemente usati nelle app.
    Wern Ancheta
    Reagire Nativo
  • Costruisci un'app social con React Native

    React Native, creato da Facebook, ti ​​consente di scrivere app mobili native in JavaScript moderno. Le app native di React verranno trasformate in visualizzazioni native specifiche ...
    Markus Mühlberger
    Reagire Nativo
  • Come costruire una navigazione a strisce con Flexbox

    Stai cercando di migliorare la tua conoscenza della flexbox e allo stesso tempo impara come costruire facilmente un layout attraente e unico? Se è così, assicurati di leggere questo ...
    George Martsoukos
    Flexbox
  • Animare la tua app nativa React

    Le animazioni possono dare vita alla tua app e rendere le tue UI più intuitive. In questo tutorial imparerai come implementare diversi tipi di animazioni in ...
    Wern Ancheta
    Reagire Nativo
  • Come creare un'applicazione Face Detection con React Native

    Sei uno sviluppatore di app ibrido che desidera includere il rilevamento del volto nella tua app, ma non hai idea di dove iniziare? Come inizio, potresti leggere An ...
    Wern Ancheta
    Reagire Nativo