【问题标题】:Xamarin - Add ESRI MapView dynamically to FrameLayoutXamarin - 将 ESRI MapView 动态添加到 FrameLayout
【发布时间】:2017-06-20 04:21:23
【问题描述】:

我还没有找到使用 axml 定义从 ArcGIS SDK for Xamarin 添加 MapViewer 的任何功能。这似乎是不可能的:

<?xml versio="1.0" encoding="utf-8"?>
<LinearLayout>
   ...
   <com.esri.mapping.MapView ... />
</LinearLayout>

我发现了使用代码动态构建整个视图的示例。 https://github.com/Esri/arcgis-runtime-samples-xamarin/tree/master/src/Android/Xamarin.Android

我更喜欢使用 XML 来更灵活地扩展视图,所以我想到了将 MapView 动态添加到 FrameLayout 中 - 像这样定义资源 (activity_map.axml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
       android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/mapView" />
</LinearLayout>

然后在activity类中:

public class MainActivity : MvxActivity<MainViewModel>
{
    private MapView _mapView = new MapView();

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        _mapView = new MapView(this);

        SetContentView(Resource.Layout.activity_amp);
        //How to get FrameLayout id ???
        var mapContainer=(FrameLayout)FindViewById();
        mapContainer.AddView(_mapView);
    }
}

这是一种有效的方法吗?你会推荐另一个吗?

【问题讨论】:

  • 刚刚找到答案,使用xml声明确实可以:schemas.android.com/apk/res/android" android :orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">

标签: c# android xamarin arcgis esri


【解决方案1】:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Esri.ArcGISRuntime.UI.Controls.MapView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/mapView" />
</LinearLayout>

public class MainActivity : MvxActivity<MainViewModel>
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.activity_main);
        var mapView = (MapView) FindViewById(Resource.Id.mapView);
        mapView.Map = ViewModel.Map;
    }   
}

【讨论】:

  • 想解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多