Xamarin iOS: Entry Unfocus event nem triggerelődik, ListView-el.

Ha egy Entry épp focus alatt van, és úgy választunk egy listaelemet a ListView-ből, az Entry Unfocus eventje nem fog triggerelődni. Ez azért van, mert a ListView a Touch eseményt ilyenkor elnyeli. Az én esetemben a megoldás ListView mögött egy háttérszínnel rendelkező grid volt, ami képes touch eventeket elkapni. A ListView InputTransparent tulajdonságának True-ra állításával ez a probléma megoldódott, mert az alatta lévő grid fókuszt kapott, és “mintha kikattintottunk volna” a gridből, az entry focusa megszűnt.

        <ListView
            x:Name="list"
            BackgroundColor="#393939"
            ItemTapped="list_ItemTapped"

            InputTransparent="True"

            ItemsSource="{Binding Path=AutoCompleteItems, Source={x:Reference UserControl}}"
            SelectedItem="{Binding Path=SelectedAddress, Source={x:Reference UserControl}}"
            SeparatorVisibility="None">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <usercontrols:AddressSelectorAutoCompleteItemDataTemplate />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

Próbáltam a ListView ItemSelectedjében unfocusolni az Entry Controlokat, azonban ez nem hozott sikert.

This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

Xamarin Android: TextView / Entry padding eltávolítása

Ha az iOS Entry láthatólag nem tartalmaz margót vagy paddingot, de Androidon máshogy renderelődik ki, akkor gyanakodhatunk arra, hogy valahol nem állítottunk a Xamarin.Forms kódban margót/paddingot nullára. Azonban a Forms Paddingjával és Marginjával nem állítható az androidos TextView paddingja, ehhez customrenderer-re lesz szükség.

[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntry Renderer))]
namespace banditoth.Droid.Renderers
{
    public class CustomEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // Eltávolítjuk a paddingot.
                Control.SetPadding(0, 0, 0, 0);
            }
        }
    }
}

A Control.SetPaddinggal Custom értékeket állíthatunk be a natív TextView paddingjának. Nekem most az eltávolításra volt szükségem, ezért kinulláztam.

This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

Xamarin Android: SplashScreenActivity és PushNotification megnyitás, kilőtt alkalmazásnál

Alapvetően, ha az alkalmazásunkat PushNotificationból indítja el az Android, és van SplashScreenActivitynk, akkor a MainActivityben nem fogjuk az Extras tömbben megkapni a PushNotification adatait, és nem fogunk tudni reagálni rá.

Mivel a SplashScreenActivity-nk a MainLauncher, ezért ennek az Activitynek az Intent.Extra-jai közé kerülnek be a Pushnotif extrák.

Fontos megjegyezni, hogy az onNewIntent nem fog megfutni terminált alkalmazásnál.

A MainActivity-n az ActivityAttributeban a következőket kell beállítani:

Exported = true, LaunchMode = LaunchMode.SingleTop

A MainActivityben meg kell hívni az onCreate metódusban a következő metódust a LoadApplication hívás után, ha Xamarin esetén a CrossGeeks FirebasePushNotificationPluginját használjuk:

FirebasePushNotificationManager.ProcessIntent(this, Intent);

A SplashScreenActivity ActivityAttributejánál a következőket kell beállítani:

MainLauncher = true, NoHistory = true

A SplashScreenActivity onResume metódusát pedig úgy kell Overrideolni, hogy a MainActivity StartActivityje előtt, kitöltjük az Intent extráit, mintha az Android oprendszer töltötte volna ki a MainActivity számára:

var mainIntent = new Intent(Application.Context, typeof(MainActivity));

 if (Intent.Extras != null) {
     mainIntent.PutExtras(Intent.Extras);
 }
 mainIntent.SetFlags(ActivityFlags.SingleTop);
 StartActivity(mainIntent);
This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

Multilingual App Toolkit build fail Visual Studio Mac-en

ProjectName is Multilingual build enabled, but the Multilingual App Toolkit is unavailable during the build

Mivel a Mac-es VS-hez nincs Multilingual App Toolkit, ezért ideiglenesen ki kell kapcsolni a buildből a Toolkitet. Ezt a solution unloadolásával tehetjük meg, majd szerkesztjük a .csproj fájlt a következőek szerint:

A fájl végén található Import tageket ki-XML-kommentezzük:

<!-- <Import Project="$(MSBuildExtensionsPath)\Microsoft\Multilingual App Toolkit\Microsoft.Multilingual.ResxResources.targets" Label="MultilingualAppToolkit" Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\Multilingual App Toolkit\v$(MultilingualAppToolkitVersion)\Microsoft.Multilingual.ResxResources.targets')" /> -->
  <!-- <Target Name="MATPrerequisite" BeforeTargets="PrepareForBuild" Condition="!Exists('$(MSBuildExtensionsPath)\Microsoft\Multilingual App Toolkit\Microsoft.Multilingual.ResxResources.targets')" Label="MultilingualAppToolkit">
    <Warning Text="$(MSBuildProjectFile) is Multilingual build enabled, but the Multilingual App Toolkit is unavailable during the build. If building with Visual Studio, please check to ensure that toolkit is properly installed." />
  </Target> -->
This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

Firebase Admin SDK C#: iOS-en nincs hang a PushNotification megérkezésekor.

Androiddal ellentétben, iOS-en, amennyiben nem határozzuk meg expliciten azt, hogy a készülék hangot játsszon le a RemoteNotification megérkezésekor, a készülék némán kézbesíti az értesítést.

Amennyiben a C#-os FirebaseAdmin SDK implementációt használjuk a PushNotificationok kiküldéséhez, platformspecifikus mezőket kell használni a Notification-ban.

Forrás: https://firebase.google.com/docs/cloud-messaging/send-message#when-to-use-common-fields

A hangot az apns objektumban kell meghatározni az iOS platform számára. C# implementációbanban a Notification osztály tartalmaz egy APNs obejktumot, amelynek a következők szerint kell értéket adni:

        var Message = new FirebaseAdmin.Messaging.Message()
            {
                Notification = new FirebaseAdmin.Messaging.Notification
                {
                    Title = title,
                    Body = message,            
                },
                Token = token,
                Data = data,
                Apns = new FirebaseAdmin.Messaging.ApnsConfig()
                {
                    Aps = new FirebaseAdmin.Messaging.Aps()
                    {
                        Sound = "default"
                    }
                }
            };

A default paraméter az értesítések alapértelmezett hangját szólaltatja meg a telefonnal. Amennyiben saját hangot szeretnénk lejátszani, azt is itt kell meghatározni.

This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.