Ringkasan Bab 2. Anatomi aplikasi
Catatan
Buku ini diterbitkan pada musim semi 2016, dan belum diperbarui sejak saat itu. Ada banyak dalam buku yang tetap berharga, tetapi beberapa materi sudah kedaluarsa, dan beberapa topik tidak lagi sepenuhnya benar atau lengkap.
Dalam aplikasi Xamarin.Forms , objek yang menempati ruang di layar dikenal sebagai elemen visual, dienkapsulasi oleh VisualElement
kelas . Visual Elements dapat dibagi menjadi tiga kategori yang sesuai dengan kelas ini:
Turunan Page
menempati seluruh layar, atau hampir seluruh layar. Seringkali, anak dari halaman adalah Layout
turunan untuk mengatur elemen visual anak. Anak-anak dapat menjadi kelas atau turunan Layout
lain Layout
(sering disebut elemen), yang merupakan objek yang familier seperti teks, bitmap, penggeser, tombol, kotak daftar, View
dan sebagainya.
Bab ini menunjukkan cara membuat aplikasi dengan berfokus pada Label
, yang merupakan turunan View
yang menampilkan teks.
Menyapa
Dengan platform Xamarin terinstal, Anda dapat membuat solusi baru Xamarin.Forms di Visual Studio atau Visual Studio untuk Mac. Solusi Halo menggunakan Pustaka Kelas Portabel untuk kode umum.
Catatan
Pustaka Kelas Portabel telah digantikan oleh pustaka .NET Standard. Semua kode sampel dari buku telah dikonversi untuk menggunakan pustaka standar .NET.
Sampel ini menunjukkan solusi yang Xamarin.Forms dibuat di Visual Studio tanpa modifikasi. Solusinya terdiri dari empat proyek:
- Halo, Pustaka Kelas Portabel (PCL) yang dibagikan oleh proyek lain
- Hello.Droid, proyek aplikasi untuk Android
- Hello.iOS, proyek aplikasi untuk iOS
- Hello.UWP, proyek aplikasi untuk Platform Windows Universal (Windows 10 dan Windows 10 Mobile)
Catatan
Xamarin.Formstidak lagi mendukung Windows 8.1, Windows Telepon 8.1, atau Windows 10 Mobile, tetapi Xamarin.Forms aplikasi berjalan di desktop Windows 10.
Anda dapat membuat salah satu proyek aplikasi ini sebagai proyek startup, lalu membangun dan menjalankan program pada perangkat atau simulator.
Di banyak Xamarin.Forms program, Anda tidak akan memodifikasi proyek aplikasi. Ini sering tetap kecil stubs hanya untuk memulai program. Sebagian besar fokus Anda adalah pustaka yang umum untuk semua aplikasi.
Di dalam file
Visual yang ditampilkan oleh program Hello didefinisikan dalam konstruktor App
kelas. App
berasal dari Xamarin.Forms kelas Application
.
Catatan
Templat solusi Visual Studio untuk Xamarin.Forms membuat halaman dengan file XAML. XAML tidak tercakup dalam buku ini hingga Bab 7.
Bagian Referensi dari proyek Hello PCL mencakup rakitan berikut Xamarin.Forms :
- Xamarin.Forms. Inti
- Xamarin.Forms. Xaml
- Xamarin.Forms. Platform
Bagian Referensi dari lima proyek aplikasi mencakup rakitan tambahan yang berlaku untuk platform individual:
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.UWP
- Xamarin.Forms. Platform.WinRT
- Xamarin.Forms. Platform.WinRT.Tablet
- Xamarin.Forms. Platform.WinRT. Telepon
Catatan
Bagian Referensi dari proyek-proyek ini tidak lagi mencantumkan rakitan. Sebagai gantinya, file proyek berisi tag PackageReference yang mereferensikan Xamarin.Forms paket NuGet. Bagian Referensi di Visual Studio mencantumkan Xamarin.Forms paket daripada Xamarin.Forms rakitan.
Setiap proyek aplikasi berisi panggilan ke metode statis Forms.Init
di Xamarin.Forms
namespace layanan. Ini menginisialisasi Xamarin.Forms pustaka. Versi yang berbeda didefinisikan Forms.Init
untuk setiap platform. Panggilan ke metode ini dapat ditemukan di kelas berikut:
- iOS:
AppDelegate
- Android:
MainActivity
- UWP:
App
kelas,OnLaunched
metode
Selain itu, setiap platform harus membuat instans App
lokasi kelas di pustaka bersama. Ini terjadi dalam panggilan ke LoadApplication
di kelas berikut:
- iOS:
AppDelegate
- Android:
MainActivity
- UWP:
MainPage
Jika tidak, proyek aplikasi ini adalah program "tidak melakukan apa-apa" normal.
PCL atau SAP?
Anda dapat membuat Xamarin.Forms solusi dengan kode umum baik di Pustaka Kelas Portabel (PCL) atau Proyek Aset Bersama (SAP). Untuk membuat solusi SAP, pilih opsi Bersama di Visual Studio. Solusi HelloSap menunjukkan templat SAP tanpa modifikasi.
Catatan
Pustaka Kelas Portabel telah digantikan oleh pustaka .NET Standard. Semua kode sampel dari buku telah dikonversi untuk menggunakan pustaka standar .NET. Jika tidak, pustaka PCL dan .NET Standard secara konseptual sangat mirip.
Pendekatan pustaka menggabungkan semua kode umum dalam proyek pustaka yang dirujuk oleh proyek aplikasi platform. Dengan pendekatan SAP, kode umum secara efektif ada di semua proyek aplikasi platform dan dibagikan di antara mereka.
Sebagian besar Xamarin.Forms pengembang lebih suka pendekatan pustaka. Dalam buku ini, sebagian besar solusi menggunakan pustaka. Mereka yang menggunakan SAP menyertakan akhiran Sap dalam nama proyek.
Dengan pendekatan SAP, kode dalam proyek bersama dapat menjalankan kode yang berbeda untuk berbagai platform dengan menggunakan arahan prapemrosedur C# (#if
, #elif
, dan #endif
) dengan pengidentifikasi yang telah ditentukan sebelumnya ini:
- iOS:
__IOS__
- Android:
__ANDROID__
- UWP:
WINDOWS_UWP
Di pustaka bersama, Anda dapat menentukan platform apa yang Anda jalankan saat runtime, seperti yang akan Anda lihat nanti di bab ini.
Label untuk teks
Solusi Salam menunjukkan cara menambahkan file C# baru ke proyek Salam . File ini mendefinisikan kelas bernama GreetingsPage
yang berasal dari ContentPage
. Dalam buku ini, sebagian besar proyek berisi satu ContentPage
turunan yang namanya adalah nama proyek dengan akhiran Page
ditambahkan.
GreetingsPage
Konstruktor membuat contoh Label
tampilan, yang merupakan Xamarin.Forms tampilan yang menampilkan teks. Properti Text
diatur ke teks yang ditampilkan oleh Label
. Program ini mengatur ke Label
Content
properti .ContentPage
Konstruktor App
kelas kemudian membuat instans GreetingsPage
dan mengaturnya ke propertinya MainPage
.
Teks ditampilkan di sudut kiri atas halaman. Di iOS, ini berarti bilah status halaman tumpang tindih. Ada beberapa solusi untuk masalah ini:
Solusi 1. Sertakan padding pada halaman
Atur Padding
properti di halaman. Padding
berjenis Thickness
, struktur dengan empat properti:
Padding
menentukan area di dalam halaman tempat konten dikecualikan. Ini memungkinkan Label
untuk menghindari penimpaan bilah status iOS.
Solusi 2. Sertakan padding hanya untuk iOS (hanya SAP)
Atur properti 'Padding' hanya di iOS menggunakan SAP dengan arahan preproscessor C#. Ini ditunjukkan dalam solusi GreetingsSap.
Solusi 3. Sertakan padding hanya untuk iOS (PCL atau SAP)
Dalam versi yang Xamarin.Forms digunakan untuk buku, Padding
properti khusus untuk iOS di PCL atau SAP dapat dipilih menggunakan Device.OnPlatform
metode atau Device.OnPlatform<T>
statis. Metode ini sekarang tidak digunakan lagi
Metode ini Device.OnPlatform
digunakan untuk menjalankan kode khusus platform atau untuk memilih nilai khusus platform. Secara internal, mereka menggunakan Device.OS
properti baca-saja statis, yang mengembalikan anggota TargetPlatform
enumerasi:
Metode Device.OnPlatform
, Device.OS
properti, dan TargetPlatform
enumerasi semuanya sekarang tidak digunakan lagi. Sebagai gantinya Device.RuntimePlatform
, gunakan properti dan bandingkan string
nilai pengembalian dengan bidang statis berikut:
iOS
, string "iOS"Android
, string "Android"UWP
, string "UWP", mengacu pada Platform Windows Universal
Properti Device.Idiom
baca-saja statis terkait. Ini mengembalikan anggota TargetIdiom
, yang memiliki anggota ini:
Desktop
Tablet
Phone
Unsupported
tidak digunakan
Untuk iOS dan Android, cutoff antara Tablet
dan Phone
adalah lebar potret 600 unit. Untuk platform Windows, Desktop
menunjukkan aplikasi UWP yang berjalan di bawah Windows 10, dan Phone
menunjukkan aplikasi UWP yang berjalan di bawah aplikasi Windows 10.
Solusi 3a. Mengatur margin pada Label
Properti Margin
diperkenalkan terlambat untuk disertakan dalam buku, tetapi juga berjenis Thickness
dan Anda dapat mengaturnya untuk Label
menentukan area di luar tampilan yang disertakan dalam perhitungan tata letak tampilan.
Properti Padding
hanya tersedia di Layout
dan Page
turunannya. Properti Margin
ini tersedia di semua View
turunan.
Solusi 4. Tengahkan label di dalam halaman
Anda dapat mempusatkan Label
Page
di dalam (atau meletakkannya di salah satu dari delapan tempat lain) dengan mengatur HorizontalOptions
properti dan VerticalOptions
ke Label
nilai jenis LayoutOptions
. Struktur LayoutOptions
mendefinisikan dua properti:
Properti
Alignment
jenisLayoutAlignment
, enumerasi dengan empat anggota:Start
, yang berarti kiri atau atas tergantung pada orientasi,Center
,End
, yang berarti kanan atau bawah tergantung pada orientasi, danFill
.Properti
Expands
jenisbool
.
Umumnya properti ini tidak digunakan secara langsung. Sebagai gantinya, kombinasi dari kedua properti ini disediakan oleh delapan properti baca-saja statis jenis LayoutOptions
:
LayoutOptions.Start
LayoutOptions.Center
LayoutOptions.End
LayoutOptions.Fill
LayoutOptions.StartAndExpand
LayoutOptions.CenterAndExpand
LayoutOptions.EndAndExpand
LayoutOptions.FillAndExpand
HorizontalOptions
dan VerticalOptions
merupakan properti paling penting dalam Xamarin.Forms tata letak, dan dibahas secara lebih rinci dalam Bab 4. Menggulir Tumpukan.
Berikut hasilnya dengan HorizontalOptions
properti dan VerticalOptions
keduanya Label
diatur ke LayoutOptions.Center
:
Solusi 5. Tengahkan teks di dalam Label
Anda juga dapat mempusatkan teks (atau menempatkannya di delapan lokasi lain di halaman) dengan mengatur HorizontalTextAlignment
properti dan VerticalTextAlignment
ke Label
anggota TextAlignment
enumerasi:
Start
, yang berarti kiri atau atas (tergantung pada orientasi)Center
End
, yang berarti kanan atau bawah (tergantung pada orientasi)
Kedua properti ini hanya didefinisikan oleh Label
, sedangkan HorizontalAlignment
properti dan VerticalAlignment
didefinisikan oleh View
dan diwariskan oleh semua View
turunan. Hasil visual mungkin tampak mirip, tetapi sangat berbeda seperti yang ditunjukkan bab berikutnya.