2016-04-26 4 views
1

レイアウト内のボタンからAndroid.Support.V7.Widget.ListPopupWindowをドロップダウンメニューとして使用しています。ここで私は 異なる幅でレンダリングされたカスタムListPopupWindow

void MenuIcon_Click (object sender, EventArgs e) 
{ 
    popupWindow = new Android.Support.V7.Widget.ListPopupWindow (this); 
    popupAdapter = new MenuPopUpAdapter (this,selectedIndex,menuList); 
    popupAdapter.ItemClick+= PopupAdapter_ItemClick; 
    popupWindow.SetAdapter (popupAdapter); 
    popupWindow.AnchorView = menuButton; 
    Display display = WindowManager.DefaultDisplay; 
    Point size = new Point(); 
    display.GetSize (size); 
    int width = size.X; 
    popupWindow.Width =160; 
    popupWindow.Show(); 
} 

を使用していたコードスニペットですが、デバッグ中に、私はそれを静的な幅を与えているにもかかわらず、それは異なるデバイスで異なるレンダリングされる、と指摘しました。この問題の原因は何ですか?

答えて

2

これは、Android搭載端末の画面の密度が異なるためです。この問題を解決するには、DP(Density Independent Pixels)のディメンションについて言及する必要があります。 This documentation from Google will be a nice read

このメソッドからプログラムでディメンションを設定する際に、対応するピクセル値を取得できます。

public int dpToPx(int dp) { 
     DisplayMetrics displayMetrics = Resources.DisplayMetrics; 
     int px = (int)Math.Round(dp * (displayMetrics.Density));  
     return px; 
    } 

あなたは問題

popupWindow.Width =dpToPx(160); 
+0

すごいを修正するために、上記のようにコードを変更することができます!魅力のように働きます:)ありがとうございました@sreeraj! – 404