C#使用Xamarin開發可移植移動應用進階篇(6.使用渲染器針對單個平臺自定義控件..很很很很重要..),附源碼

原文: C#使用Xamarin開發可移植移動應用進階篇(6.使用渲染器針對單個平臺自定義控件..很很很很重要..),附源碼

前言

系列目錄

C#使用Xamarin開發可移植移動應用目錄html

源碼地址:https://github.com/l2999019/DemoAppgit

能夠Star一下,隨意 - -github

說點什麼..

本篇..基本能夠算是Xamarin在應用開發過程當中的核心了..真的很很很重要..框架

想學習的..想用的..建議仔細閱讀..嗯..打醬油的 ..快速滑倒下面點個推薦 - - 哈哈哈...ide

今天的學習內容?

只講一個,關於Xamarin.Forms針對各個平臺如何進行可定製化的控件操做.佈局

也就是針對某個平臺的細顆粒化操做.post

廢話很少說,咱們直接開始.學習

 

正文

1.什麼是渲染器

自定義渲染器提供了一種強大的方法來定製Xamarin.Forms控件的外觀和行爲。它們可用於一些微小的樣式更改或複雜的平臺特定佈局和行爲定製。優化

2.爲何須要自定義渲染器

由於在不使用自定義渲染器的狀況下更改Xamarin.Forms控件的外觀是顆粒度較粗的.spa

由於Xamarin.Forms爲了支持多個平臺同時可用,因此對一些特定平臺的加強功能和自定義功能進行了刪減。因此當咱們須要使用這些功能時,就必須實現自定義渲染器。

3.如何使用自定義渲染器

下面咱們首先來經過一個例子來說解如何使用渲染器.

咱們找到一個Xamarin控件,好比ProgressBar進度條..它在Xamarin中,可控的屬性應該就只有Progress進度而已..

咱們編寫代碼以下:

<ProgressBar Progress=".5" BackgroundColor="Blue"   />

獲得以下效果:

這裏,咱們特地給它加了一個藍色的背景..來展現整個控件的大小..

咱們會發現,進度條只是他裏面很小的一部分,大部分被背景佔用,並且沒法在Xamarin.Forms中去修改,咱們沒法改變它的高度.

那麼,咱們如何修改它呢?..這時候就要用自定義渲染器了,到特色的平臺去優化它

首先咱們在可移植的庫中自定義一個ProgressBar,方便Xamarin.Forms調用,代碼以下:

 public class MyProgressBar: ProgressBar
{
}

就這樣,就足夠了,咱們只須要繼承一下原來的ProgressBar便可..

而後咱們到安卓的平臺下,添加自定義的渲染器.,記得,是安卓的平臺,在這個類庫下:

添加渲染器,代碼以下:

//表示使用 Xamarin.Forms在使用MyProgressBar的時候,用MyProgressBarRenderer渲染替換
[assembly: ExportRenderer(typeof(MyProgressBar), typeof(MyProgressBarRenderer))]
namespace DemoApp.Droid
{
    public class MyProgressBarRenderer:ProgressBarRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
        {
            base.OnElementChanged(e);

            Control.ScaleY = 10; //改變Y軸大小
           
            Control.SetPadding(-0, -12, 0, -12);


        }
    }
}

上面的代碼有2個關鍵的地方,一個是須要在命名空間上申明,你須要代替渲染的控件.

第二個是,你須要繼承相關的渲染基類,好比咱們這裏用的ProgressBarRenderer

咱們能夠看看這裏基類裏面繼承了一些什麼,以下:

咱們能夠看到,在安卓庫中,它就繼承了安卓widget的原生進度條,那麼,原生進度條的全部屬性,咱們就都是能夠用的了.

好比咱們在代碼中寫的 "ScaleY" 這種屬性和SetPadding這種方法.,因此前面我一直強調的,有些東西 你找了安卓(IOS)的解決方案,就一樣找到了Xamarin的

我這裏雖然沒有IOS的環境,可是咱們也能夠到IOS裏面看看ProgressBarRenderer繼承了什麼,以下:

熟悉IOS開發的同窗應該很清楚了..Uikit..就是IOS的用戶界面

 

在上面的代碼中,咱們針對安卓平臺,修改了他的Y軸高度和內邊距的值,咱們如何使用呢?以下:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:loact="clr-namespace:DemoApp.MyRenderer"
             x:Class="DemoApp.ViewsDomePage">
    <ContentPage.Content>
<loact:MyProgressBar Progress=".6" BackgroundColor="Red"  />
                <ProgressBar Progress=".5" BackgroundColor="Blue" MinimumHeightRequest="-20" HeightRequest="-1"  />
    </ContentPage.Content>
</ContentPage>

咱們在ContentPage 中,先引入咱們自定的命名空間,調用名改成loact.

而後就直接loact:MyProgressBar,就能夠了和原來幾乎沒區別.

而後咱們看看運行效果,以下:

咱們能夠看到,雖然咱們也給了紅色的背景,可是它只顯示在進度條中了,不會讓控件很高, SetPadding起了做用.

固然,咱們能操做的遠遠不止這些..

下面直接給上一個我搭好的基礎框架的效果吧...嗯 還使用了一下百度地圖的原生SDK.

 

 

 

 

 

 

寫在最後

嗯..也沒啥好說的了. 後面慢慢加深.

.最後,謝謝各位的支持,喜歡請點個推薦

相關文章
相關標籤/搜索