自定义ListPopupWindow以不同的宽度呈现

时间:2016-04-26 13:47:04

标签: xamarin xamarin.android

我使用Android.Support.V7.Widget.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 ();
}

但是在调试时我注意到,即使我给它一个静态宽度,它在不同设备中的呈现方式也不同。是什么导致了这个问题?

1 个答案:

答案 0 :(得分:2)

这是因为Android设备的屏幕密度不同。您需要在DP(密度无关像素)中提及尺寸以克服此问题。 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);