Я предлагаю вам переключиться на RelativeLayout
вместо использования LinearLayout
для размещения ваших просмотров. LinearLayout
по своей сути хочет позиционировать материал в соответствии с его ориентацией, а RelativeLayout
дает вам больше свободы и возможностей для упорядочивания представлений.
Также имейте в виду, что порядок добавления представлений в ваш контейнер-контейнер имеет значение. Так что в вашем случае я бы добавил ListView
последний. Таким образом, вы гарантируете, что список будет отображаться поверх всего остального.
Также вам необходимо полностью указать LayoutParams для каждого представления!
var root = new RelativeLayout(this);
_mySearchBox = new AutoCompleteTextView(this) { Hint = "Search rooms or people..." };
_myMapView = new MapView(this)
{
Id = View.GenerateViewId()
};
_floorsTableView = new ListView(this)
{
Id = View.GenerateViewId()
};
var searchBoxParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
searchBoxParams.AddRule(LayoutRules.AlignParentTop);
var mapParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
var listParams = new RelativeLayout.LayoutParams(100, 150);
listParams.AddRule(LayoutRules.AlignParentStart);
listParams.AddRule(LayoutRules.AlignParentBottom);
listParams.SetMargins(16, 0, 0, 16);
root.AddView(_myMapView, mapParams);
root.AddView(_mySearchBox, searchBoxParams);
root.AddView(_floorsTableView, listParams);
SetContentView(root, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent));
Вы также захотите преобразовать размеры вpx
из dp
:
private int DpToPx(int dp)
{
return (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, Resources.DisplayMetrics);
}
Таким образом, ваши размеры будут масштабироваться в соответствии с плотностью дисплея.