首页 > 其他分享 >.NET MAUI 安卓应用开发初体验

.NET MAUI 安卓应用开发初体验

时间:2022-11-25 17:22:06浏览次数:72  
标签:初体验 安卓 public MAUI NET Android SDK

一、.NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决

引言

本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络问题解决思路。

现象一:Visiual Studio 2022中添加Android设备管理时,提示系统映像下载错误:Network is not reachable. Please check your connection and try again.

现象二:Visiual Studio 2022中添加Android SDK和工具时,提示"网络不可用。请检查你的连接,然后再重试"

.NET MAUI 简介

官方文档

什么是 .NET MAUI? - .NET MAUI | Microsoft Learn

.NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML.

Using .NET MAUI, you can develop apps that can run on Android, iOS, macOS, and Windows from a single shared code-base.

image

.NET MAUI 全称 .NET Multi-platform App UI

开发环境介绍

VS版本:Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.4.1

.NET 版本:.NET 7.0 STS

安装【 .NET Multi-platform App UI 开发】

Android SDK 和 安卓模拟器

这里直接介绍出现网络问题后,解决方案

1、查看VS中 Android SDK 保存位置

2、安装 JAVA JDK,并配置在系统环境中JAVA_HOME (可以选择JDK11或者JDK 8.0)

3、下载并安装 Android Studio

4、启动Android Studio,设置国内镜像

镜像地址:http://mirrors.neusoft.edu.cn/

5、设置 Android SDK 保存位置,将Android Studio 中SDK 保存位置 和 VS 中一样

6、下载对应的Android SDK 和 Android Emulator

7、通过AVD Manager新建安卓模拟设备

二、第一个.NET MAUI 安卓应用程序

跟着官方文档,开启第一个.NET MAUI 程序

新建一个.NET MAUI应用程序

运行效果

项目截图

MainViewModel

新建ViewModel文件夹,添加MainViewModel类,继承ObservableObject。通过NuGet添加CommunityToolkit.Mvvm 8.1.0-preview1 依赖项。

  public partial class MainViewModel : ObservableObject
    {
        public MainViewModel()
        {
            this.Items= new ObservableCollection<string>();
        }
        [ObservableProperty]
        public string inputText;

        [ObservableProperty]
        public ObservableCollection<string> items;

        [RelayCommand]
        public void Add()
        {
            if (!string.IsNullOrWhiteSpace(InputText))
            {
                Items.Add(InputText);
                InputText = string.Empty;
            }
        }

        [RelayCommand]
        public void Remove(string item)
        {
            if (Items.Contains(item))
            {
                Items.Remove(item);
            }
        }
    }

MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiAppMvvM.MainPage"
             xmlns:viewModel="clr-namespace:MauiAppMvvM.ViewModel"
             x:DataType="viewModel:MainViewModel"
             x:Name="mainPage">

    <Grid RowDefinitions="100, Auto, *"
          ColumnDefinitions=".75*, .25*"
          Padding="10" 
          RowSpacing="10"
          ColumnSpacing="10">

        <Image Grid.ColumnSpan="2"
               Source="dotnet_bot.svg"  
               BackgroundColor="Orange"/>

        <Entry Placeholder="请输入您的任务项"
               Grid.Row="1"
               Grid.Column="0"
               Keyboard="Chat"
               Text ="{Binding InputText}"/>

        <Button Text="Add"
                Grid.Row="1"
                Grid.Column="1"
                Command="{Binding AddCommand}" />


        <CollectionView Grid.Row="2"
                        Grid.ColumnSpan="2"
                        ItemsSource="{Binding Items}">
            <CollectionView.ItemTemplate >
                <DataTemplate x:DataType="{x:Type x:String}">
                    <SwipeView>
                        <SwipeView.RightItems>
                            <SwipeItem Text="Delete" 
                                       IconImageSource="delete.png"
                                       BackgroundColor="LightPink" 
                                       Command="{Binding Source={RelativeSource AncestorType={x:Type viewModel:MainViewModel}}, Path=RemoveCommand}"
                                       CommandParameter="{Binding .}"/>
                        </SwipeView.RightItems>
                        <Grid Padding="0,5">
                            <Frame>
                                <Label Text="{Binding .}"
                                       FontSize="24"/>
                            </Frame>
                        </Grid>
                    </SwipeView>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </Grid>
</ContentPage>

MainPage.xaml.cs

  public MainPage(MainViewModel viewModel)
  {
       	 InitializeComponent();
         this.BindingContext = viewModel;
   }

MauiProgram.cs

  public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

#if DEBUG
		builder.Logging.AddDebug();
#endif
            builder.Services.AddSingleton<MainPage>();
            builder.Services.AddSingleton<ViewModel.MainViewModel>();
            
            return builder.Build();
        }
    }

至此,一个完整的.NET MAUI完成了,让我们一起享受.NET MAUI之旅吧!

后记

 <SwipeItem Text="Delete" 
            IconImageSource="delete.png"
            BackgroundColor="LightPink" 
            Command="{Binding Source={RelativeSource AncestorType={x:Type viewModel:MainViewModel}}, Path=RemoveCommand}"
            CommandParameter="{Binding .}"/>

SwipeItem的Command实际没有生效,目前还没有找到原因

标签:初体验,安卓,public,MAUI,NET,Android,SDK
From: https://www.cnblogs.com/xuyegui/p/16915162.html

相关文章

  • 安卓content provider
    设计目标contentprovider是安卓四大组件之一,使用其方法类进行数据获取通过contentprovider实现在不同软件之间的数据传输通过uri来标识其它应用要访问的数据,通过Content......
  • 支持安卓9.0操作系统——《XY6771CZ 4G AI核心板》相关性能!
       产品概括:《XY6771CZ4GAI核心板》为深圳市新移科技有限公司研发人员基于联发科MT6771(曦力P60)平台自主研发的4G全网通。采用Mali-G72MP3GPU,八核4*A73+4*A53架......
  • 安卓 smali启动就附加调试 的正确步骤
    网上的教程龙鱼混杂,如果没有搞清楚他们之间的关系就会翻车。首先此教程只针对想一运行就要调试的,其他的没有那么麻烦。首先让应用可以被调试,如root,或者debuggable=true......
  • 安卓挂载文件系统流程
    1、init进程system/core/init/man.cppintmain(intargc,char**argv){#if__has_feature(address_sanitizer)__asan_set_error_report_callback(AsanReportCal......
  • 微信公众号H5或者H5内嵌安卓webview——调试工具和缓存问题
    1、vConsole的使用在此类开发中,最麻烦的是上测试环境调试;这边使用的是vconsole;方法:在index.html中cdn引入vconsole后初始化即可2、缓存问题遇到的问题:在公众号H5中每......
  • android安卓触摸事件touchEvent分发的 核心精辟代码
    几行代码就可以让你快速了解安卓的触摸事件机制快速进入实战/***false表示自己处理孩子然后就像递归一样如果shiviewgroup那么首先是从activity开始的->decov......
  • [原创]借助gradle加快基于安卓开发工具开发ndk/jni编译速度
    我总是为了这个so的东西而苦逼,一直在想能不能再快一点,能不能,经过了几年的长跑,我再也忍受不了了,最近又调整优化了一下,1是因为模块化jni,导致so不会更新,因此我写了一个脚本,2......
  • python初体验
    第一句代码print("helloworld")快速切换项目栏alt+1快速运行当前文件shift+ctrl+F10关闭控制台shift+ctrl+F4 注释:单行注释:#(快捷键ctrl+/)多行注释:""......
  • MAUI新生1.8-XAML语法基础:Markup语法及CommunityTookit简介
    一、什么是Markup语法XAML可以使用等效的C#后台代码,即可以用C#写UI。但是,C#代码还稍显繁琐,所以在C#代码基础上,由CommutityToolkit提供了Markup扩展包,可以使用更加流畅的C#......
  • 4G 安卓智能核心板 XY610 (虎贲T610平台)
     紫光展锐虎贲T610采用12nm制程工艺,由两颗1.8GHz的armCortex-A75CPU和六颗1.8GHz的ArmCortex-A55处理器组成,GPU采用的是614.4MHz的MaliG52。​XY610 是一款基......