2017/01/23
2017/01/22
Xamarin FAQ 1-21 : 關於 Android 的自動加入權限設定問題
問題
當在進行行動裝置應用程式開發的時候,若您的應用程式需要使用到裝置中的硬體等相關功能,此時,您需要手動修改
AndroidManifest.xml
檔案,並且,您需要知道這些權限的名稱並且填入到這個檔案內,有沒有甚麼更加簡單的方法來處理這樣的問題。解答
- 您可以打開 Android 原生專案內的內容,在 Android 原生專案中,說擊
Properties
這個節點,並且找到Android Manifest
葉面,您將會看到下方有Required permissions
清單,您可以在這裡勾選您需要用到的權限。 - 現在,越來越多的 Xamarin.Forms 套件,當您加入到 Xamarin.Forms 專案內後,一旦您建置 Release 模式的 APK 檔案,這些套件會用到的權限便會自動加入到
AndroidManifest.xml
檔案內。若您擔心是否需要用到的權限是否有加入到AndroidManifest.xml
檔案內,可以參考底下的說明:假設這個專案是XFTakePhoto
,您可以打開這個專案下的目錄XFTakePhoto\XFTakePhoto\XFTakePhoto.Droid\obj\Release\android
查看這個檔案AndroidManifest.xml
您將會看到這個拍照應用程式,自動加入了這些權限android.permission.INTERNET
/android.permission.WRITE_EXTERNAL_STORAGE
/android.permission.READ_EXTERNAL_STORAGE
/android.hardware.camera
/android.hardware.camera.autofocus
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="XFTakePhoto.Droid" android:versionCode="1" android:versionName="1">
<!--suppress UsesMinSdkAttributes-->
<uses-sdk android:minSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<application android:label="XFTakePhoto.Droid" android:theme="@style/MyTheme" android:icon="@drawable/icon" android:name="md5a568f8c57b5f8a80d01f31a0c4f56c56.MainApplication" android:allowBackup="true">
<activity android:configChanges="orientation|screenSize" android:icon="@drawable/icon" android:label="XFTakePhoto" android:name="md5a568f8c57b5f8a80d01f31a0c4f56c56.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:configChanges="orientation|screenSize" android:name="md5a3e164e78ade0c22cefea770ddd0bc49.MediaPickerActivity" />
<provider android:name="mono.MonoRuntimeProvider" android:exported="false" android:initOrder="2147483647" android:authorities="XFTakePhoto.Droid.mono.MonoRuntimeProvider.__mono_init__" />
</application>
</manifest>
2017/01/21
Xamarin FAQ 1-20 : 如何在建置時期,就能夠發現到 XAML 語法上的錯誤
問題
原則上,當 Xamarin.Forms 應用程式在執行並且顯示一個頁面的時候,會動態的載入與分析 XAML 宣告標記檔案,並且產生出相關 .NET 物件,最後將這個頁面顯示在手機螢幕上;所以,若 XAML 的宣告標記內容若有任何錯誤,必須要等到執行時期才會發現到,當然,這個時候,您的應用程式就會造成閃退的現象,這對於使用者而言,並不是一個很好的體驗,那麼,要如何處理,才能夠讓 Visual Studio 可以在建置時期的時候,就能夠指出 XAML 檔案哪裡寫得有問題,並且可以提升整體應用程式的執行效能。
解答
請在您的核心 PCL 專案內,找到
Properties
節點,並且展開這個節點,此時,您會看到有個項目,AssemblyInfo.cs
檔案,使用滑鼠雙擊這個檔案,請在這個檔案的最後,加入底下程式碼。[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
標籤:
Visual Studio,
Xamarin,
Xamarin FAQ,
XAML
2017/01/20
Xamarin FAQ 1-19 : 如何製作類似 HTML 可連結文字標籤
問題
在 Xamarin.Forms 所提供的預設控制項中,並沒有看到類似 HTLM 可連結文字標籤效果的控制項,而且,從
Label
控制項中,也看不到有任何 點擊 Tap / Click 相關的事件可以使用;若想要在 Xamarin.Forms 的頁面中開發出這樣的控制項效果,是不是只能夠透過 Renderer 的方式來實現呢?解答
其實,關於這樣的需求,不需要透過 Renderer 就可以做到;在每個控制項中,都會擁有一個
GestureRecognizers
屬性,您可以透過這個屬性,加入想要的手勢操作 XAML 物件,就可以偵測出使用者是否有點擊這個 Label
標籤控制項了。
以底下的 XAML 宣告標籤而言,我們在
Label.GestureRecognizers
屬性內,加入了一個 TapGestureRecognizer
物件,並且使用了 Command
屬性綁定了檢視模型 ViewModel 內的一個 ICommand
的屬性,如此,您就可以在這個 ICommand
中來定義,當使用者點擊了這個文字標籤之後,需要做哪些相關的處理動作。 <Label
Grid.Column="0"
HorizontalOptions="Center" VerticalOptions="Center"
Text="查看明細"
TextColor="Blue"
FontSize="14"
>
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding 查看明細Command}"/>
</Label.GestureRecognizers>
</Label>
標籤:
Xamarin,
Xamarin FAQ
2017/01/19
Xamarin FAQ 1-18 : 如何在 XAML 中,參考其他的控制項
問題
在進行 XAML 頁面設計的時候,如何在某個控制項中的某個屬性,是參考來自於另外一個控制項的某個屬性,這該如何定義這樣的 XAML 宣告標記呢?
解答
以底下的 XAML 範例中,若您要參考某個控制項,您必須要先使用
x:Name
這個延伸宣告標記,定義這個控制項的可以存取名稱,當然,也可以在 Call behind 程式碼中,使用這個定義名稱,來存取這個控制項。
接著,您需要使用
x:Reference
這個延伸宣告標記,指出要參考的其他控制項,在底下範例中,第二個 Label
控制項的 Text
屬性,透過了指定另外一個控制項做為資料繫結的來源,並且指定了參考路徑指向 label
這個控制項的 Text
屬性。 <Label x:Name="label" Text="{Binding Title}" />
<Label Text="{Binding Source={x:Reference label}, Path=Text}"/>
標籤:
Xamarin,
Xamarin FAQ,
XAML
2017/01/18
Xamarin FAQ 1-17 : 如何在 XAML 中,使用與存取 .NET 靜態屬性
問題
當您想要使用 .NET 的靜態屬性,來集中管理 XAML 中會參考到的物件,那麼,在 XAML 中,是要如何參考這個 .NET 中的靜態屬性值呢?
解答
- 首先,您需要在 .NET 中,定義一個靜態類別,和裡面的靜態屬性。
- 在 XAML 裡面,為了要能夠參考到這個 .NET 中的靜態屬性,您需要宣告一個新的命名空間 ( namespace )。在底下的範例中,使用了 xmlns 這個關鍵字,宣告了一個新的命名空間
xmlns:local="clr-namespace:App1"
叫做 local。當您要參考這個新的命名空間內了某個靜態屬性,例如,Label
這個控制項的Font
這個屬性,它的字體大小值需要參考到 .NET 靜態屬性AppConstants.TitleFont
,這個時候,您可以使用x:Static
這個延伸擴充標記來參考其他物件屬性。Font="{x:Static local:AppConstants.TitleFont}"
在這個範例中,使用了x:Static
配合了指定AppConstants.TitleFont
屬性值,是定義在local
命名空間。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App1"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="App1.MainPage">
<Label Text="Hello, XAML!"
VerticalOptions="{x:Static LayoutOptions.Start}"
HorizontalTextAlignment="{x:Static TextAlignment.Center}"
TextColor="{x:Static Color.Aqua}"
BackgroundColor="{x:Static local:AppConstants.ForegroundColor}"
Font="{x:Static local:AppConstants.TitleFont}"
/>
</ContentPage>
標籤:
Xamarin,
Xamarin FAQ,
XAML
2017/01/17
Xamarin FAQ 1-16 : 如何在 XAML 中,使用與存取靜態資源
問題
當我們在進行宣告 XAML 個控制項標記屬性的時候,希望能夠擁有 CSS 這樣特性的功能,也就是可以把許多共同屬性的設定值,例如,顏色設定,集中定義在某個地方,這樣,就可以在 XAML 內的各個控制項參考這個顏色宣告。如此,當要變更這些參考到的控制項的顏色,就可以直接修改這個宣告顏色的地方進行修改,但是,要怎麼做到這樣的功能呢?
解答
要了要簡化與集中管理 XAML 中各控制項的屬性設定,您可以在
ContentPage
內的 Resources
屬性內,定義 ResourceDictionary
,在 ResourceDictionary
裡面,您可以透過 XAML 標記來宣告產生一些物件,讓整個頁面可以相關控制項與版面控制可以參考這個物件。
在底下的範例中,我們在
ResourceDictionary
內,宣告了一個 lSize
的物件,它的型態為 x:Double
(也就是 .NET 裡面的 double 型別),並且設定其值為 30。另外,宣告另外一個物件為 lTest
,它的型態為 x:String
,設定這個物件的值為 "我是 Xamarin.Forms"。
所以,只要在宣告
ResourceDictionary
節點之下的任何子節點,都可透過 StaticResource
這個延伸標記宣告方法,參考之前宣告的物件;例如,當要指定 Label
控制項的 FontSize
這個屬性值,就可以使用 {StaticResource lSize}
這樣的用法,指定這個 Label
控制項的 FontSize
屬性值為 30。<ContentPage.Resources>
<ResourceDictionary>
<x:Double x:Key="lSize">30</x:Double>
<x:String x:Key="lText">我是 Xamarin.Forms</x:String>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<Grid>
<Label Text="{StaticResource lText}"
Grid.Row="0" Grid.Column="0"
FontSize="{StaticResource lSize}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</Grid>
</ContentPage.Content>
標籤:
Xamarin,
Xamarin FAQ,
XAML
2017/01/16
Xamarin FAQ 1-015 : 究竟甚麼是 Prism
問題
在這份 Xamarin FAQ 問答集文件中,相關的解決方案,都會使用 Prism 框架下所提供的解決方法,不過,甚麼是 Prism呢?
解答
標籤:
Prism,
Xamarin,
Xamarin FAQ
2017/01/15
《台北》Xamarin.Forms 跨平台行動應用程式開發實戰
全新第二代《台北》Xamarin.Forms 跨平台行動應用程式開發實戰昇級版教育訓練課程即將開課,這次課程將升級成為五天的課程內容,並將於 1/18 中午 12:00 開放報名。
有鑑於上次開課於半個小時之內就完售,對於想要使用 Xamarin.Forms 來進行開發跨平台行動裝置的人,千萬不要再次錯過這樣的機會。
有鑑於上次開課於半個小時之內就完售,對於想要使用 Xamarin.Forms 來進行開發跨平台行動裝置的人,千萬不要再次錯過這樣的機會。
《台北》Xamarin.Forms 跨平台行動應用程式開發實戰報名網址(2017 / 03 / 11 ~ 2017 / 03 / 25 ( 每周星期六、日 ))
課程主題
- Xamarin.Forms 開發環境準備注意事項 ( 線上課程 )
- 安裝與設定開發環境
- Xamarin.Forms 開發環境示意圖
- Mac 作業系統
- Windows 作業系統
- 需要準備的帳號與相關設定說明
- 寫出並且確認可執行的 Hello World 的跨平台應用程式
- 體驗跨平台應用程式
- 安裝與設定開發環境
- 第一天 (03/11) :Xamarin 開發工具集 探究與解密
- Xamarin 開發平台介紹
- Xamarin.Forms 適合您嗎?
- 不同手機尺寸與解析度之視覺設計與套版方法
- 共用程式碼與 UI 的方法選擇
- 跨平台開發的問題與考量
- Xamarin.Forms 開發環境準備與設定
- Xamarin.Forms開發需求與學習指引
- 不同專案類型、專案屬性、Android SDK介紹
- 原生 Android / iOS 專案開發練習
- 第二天 (03/12) :使用 Prism 與 MVVM 進行專案開發
- Prism 開發框架說明:檢視模型定位器、導航服務、導航參數傳遞、深度連結、相依性注入、對話窗、事件聚合器
- 何謂MVVM:沒有MVVM開發方法、自行建置MVVM開發環境、使用Prism的開發框架
- 行動裝置應用程式開發上會遇到的各種不同情境與需求探討
- Xamarin.Forms 開發技術要點
- 頁面、版面配置、使用者介面控制項的使用和注意事項與練習
- 導航頁面與導航抽屜頁面開發與設計上要注意的事項
- 各種不同情境頁面應用開發設計練習
- 第三天 (03/18) :何謂XAML與深入研究各種功能應用
- 視覺宣告標記 XAML:何謂 XAML、文件結構與語法、XAML的限制、命名空間、項目、屬性、屬性項目、標記延伸功能、樣式與樣板
- 資料繫結語法深入研究:綁定來源、綁定模式、綁定種類、BindingContext介紹、實際練習
- 進階 XAML 技巧:XAML編譯、資源字典、靜態與動態資源、隱含與明確樣式、資源繼承、數值轉換器、字串格式化、平面轉換、可綁定屬性、附加屬性、附加行為、客製化控制項、使用者控制項、觸發、手勢操作、動畫
- 第四天 (03/19) :Xamarin.Forms 核心服務與各種應用練習
- Xamarin.Forms 核心服務與技術:如何從PCL專案執行原生專案的方法、如何從原生專案執行PCL專案功能、Device類別、客製專屬平台控制項
- 常用套件與插件
- 各種應用練習:檔案存取、SQLite資料庫、與裝置硬體互動、一維或二維條碼掃描與產生、OAuth2身分驗證、呼叫與存取Web服務、拍照與上傳到Web
- 第五天 (03/25) :完整專案開發練習、測試、佈署
- 企業差旅費用應用專案開發練習
- 產生特定平台可發佈檔案與注意事項
- Test Cloud 雲端視覺自動測試:UI測試REPL、針對企業差旅費用應用專案進行UI自動測試、使用 Xamarin Test Cloud在不同平台與裝置下進行 UI 自動測試
- 測試、散佈工具 HocKeyApp:管理端與用戶端實際操作與介紹
標籤:
Xamarin,
Xamarin.Forms
訂閱:
文章 (Atom)
HttpClient
類別所產生的物件,就可以進行相關 Get / Post / Put / Delete 等 RESTful 操作,並且這個類別是提供了非同步方法來呼叫,不會造成使用者操作介面被凍結的問題;不過,若您在核心 PCL 專案內取使用HttpClient
這個類別,卻發現到您是無法參考到這個物件,那麼,該如何解決此一問題呢?