2017-09-14 11 views
0

Android用のXamarinフォームベースのアプリケーションでは、ステータスバーがContentPageと重複しているという問題があります。XamarinForm:Android:ステータスバーオーバーラップcontentpage

ハードコードの設定XAMLのContentPageの厚さの値は、Androidデバイスごとに機能しないことがあります。

私はブログでいくつかの解決策を見つけましたが、誰も働いていません。 Xamarin.Droidプロジェクトからステータスバーの高さを計算し、コンテンツページにパディングを設定します。

だから誰でもステータスバーの高さを計算して、ランタイムのコンテンツページの上にパディングを設定する方法をお勧めしますか?

ありがとうございます。

答えて

0

解決策が見つかりました:

これはカスタムレンダラーを作成する必要があります。

以下見つけるXamarin.DroidプロジェクトからPageRendererためのコードを言及してください:

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

名前空間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); 

    } } } 

そして "MainActivity" のコードを見つけてください。 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; 
    } 
} 

これは私の問題を解決しました。

関連する問題