Xamarin 以不同宽度渲染的自定义ListPopupWindow

Xamarin 以不同宽度渲染的自定义ListPopupWindow,xamarin,xamarin.android,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,selected

我正在使用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 ();
}

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

这是因为Android设备的屏幕密度不同。为了解决这个问题,您需要使用DPs(与密度无关的像素)来表示尺寸

通过此方法编程设置尺寸时,可以获得要提及的相应像素值

public int dpToPx(int dp) {
        DisplayMetrics displayMetrics = Resources.DisplayMetrics;
        int px = (int)Math.Round(dp * (displayMetrics.Density));       
        return px;
    }
您可以如上所述修改代码以解决此问题

popupWindow.Width =dpToPx(160);