2017-09-14 10 views
0

Dans Xamarin Application basée sur un formulaire pour Android, la barre d'état chevauche ContentPage.XamarinForm: Android: page de contenu de chevauchement de barre d'état

Définition du code rigide La valeur d'épaisseur pour ContentPage dans XAML peut ne pas fonctionner pour chaque périphérique Android. Par conséquent, j'ai trouvé peu de solutions sur les blogs, mais je ne travaille pas avec qui que ce soit. Partout écrit que calculer la hauteur de la barre d'état du projet Xamarin.Droid et définir padding à la page de contenu.

Quelqu'un peut-il suggérer comment régler Padding en haut sur la page de contenu sur Runtime en calculant la hauteur de la barre d'état?

Merci d'avance.

Répondre

0

J'ai trouvé la solution:

Pour cela, nous devons créer sur mesure renderer.

S'il vous plaît trouverez ci-dessous mentionné code pour PageRenderer du projet Xamarin.Droid:

[assembly: ExportRenderer(typeof(ContentPage), typeof(MyContentPageRenderer))] 

espace de noms ProjectName.Droid.Renderer

{

public class MyContentPageRenderer : PageRenderer 
{ 
    public MyContentPageRenderer() 
    { 
    } 


    protected override void OnElementChanged(ElementChangedEventArgs<Page> e) 
    { 
     base.OnElementChanged(e); 


    } 

    protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
     base.OnElementPropertyChanged(sender, e); 



     float pixWidth = (float)Resources.DisplayMetrics.WidthPixels; 
     float fdpWidth = (float)App.Current.MainPage.Width; 
     float pixPerDp = pixWidth/fdpWidth; 

     this.Element.Padding = new Thickness(0, MainActivity.StatusBarHeight/pixPerDp, 0, 0); 

    } } } 

Et S'il vous plaît trouver le code de "MainActivity" comme mentionné ci-dessous pour le calcul StatusBarHeight:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
{ 
    public static int StatusBarHeight; 

    protected override void OnCreate(Bundle bundle) 
    { 

     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 

     if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) 
     { 
      Window.DecorView.SystemUiVisibility = 0; 
      var statusBarHeightInfo = typeof(FormsAppCompatActivity).GetField("_statusBarHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
      statusBarHeightInfo.SetValue(this, 0); 
      Window.SetStatusBarColor(new Android.Graphics.Color(18, 52, 86, 255)); 
     } 

     LoadApplication(new App()); 

     StatusBarHeight = getStatusBarHeight(); 

    } 

    public int getStatusBarHeight() 
    { 

     int statusBarHeight = 0, totalHeight = 0, contentHeight = 0; 
     int resourceId = Resources.GetIdentifier("status_bar_height", "dimen", "android"); 
     if (resourceId > 0) 
     { 
      statusBarHeight = Resources.GetDimensionPixelSize(resourceId); 


     } 
     return statusBarHeight; 
    } 
} 

Cela a résolu mon problème.