You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android更新后MAUI密码输入字段失效问题求助

解决方案:MAUI Entry IsPassword在Android 11(API30)失效问题

针对你遇到的MAUI密码输入框在Android 11上明文显示的问题,以下是几个可行的排查和解决方法:

1. 升级MAUI到最新稳定版本

早期MAUI版本存在Android平台上IsPassword属性失效的已知bug,升级到最新版通常能解决这类兼容性问题。执行以下命令更新MAUI工作负载:

dotnet workload update maui

之后清理并重新生成项目。

2. 使用自定义Android渲染器强制设置密码输入类型

如果升级版本无效,可以通过自定义渲染器手动指定输入框的密码类型,绕过MAUI的默认实现:

步骤1:创建自定义Entry类

在共享项目中添加一个继承自Entry的类:

namespace gfMobile;

public class PasswordEntry : Entry
{
}

步骤2:实现Android平台渲染器

在Android项目中添加渲染器代码:

using Android.Content;
using Android.Widget;
using gfMobile;
using gfMobile.Platforms.Android;
using Microsoft.Maui.Controls.Platform;

[assembly: ExportRenderer(typeof(PasswordEntry), typeof(PasswordEntryRenderer))]
namespace gfMobile.Platforms.Android;

public class PasswordEntryRenderer : EntryRenderer
{
    public PasswordEntryRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
        
        if (Control != null)
        {
            var editText = Control as EditText;
            // 强制设置密码输入类型
            editText.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;
        }
    }
}

步骤3:替换XAML中的Entry

修改MainPage.xaml,使用自定义的PasswordEntry替代原来的Entry,并添加命名空间引用:

<?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"
             xmlns:local="clr-namespace:gfMobile"
             x:Class="gfMobile.MainPage">

<ScrollView>
    <VerticalStackLayout
        Spacing="25"
        Padding="30,0"
        VerticalOptions="Center">

        <Label
            Text="Enter password"
            SemanticProperties.HeadingLevel="Level2"
            FontSize="18"
            HorizontalOptions="Center" />

        <local:PasswordEntry
            IsPassword="true"
            x:Name="password"
            Text=""
            SemanticProperties.HeadingLevel="Level2"
            SemanticProperties.Description=""
            FontSize="18"
            HorizontalOptions="Center" />

        <Button
            x:Name="send"
            Text="Send"
            SemanticProperties.Hint="send"
            Clicked="OnBtnClicked"
            HorizontalOptions="Center" />

    </VerticalStackLayout>
</ScrollView>
</ContentPage>

3. 清理项目缓存并重新构建

有时候缓存会导致兼容性问题,执行以下命令清理后重新构建:

dotnet clean
dotnet nuget locals all --clear
dotnet build -f net7.0-android  # 根据你的目标框架调整,比如net8.0-android

4. 检查Android项目配置

确认Android项目的targetSdkVersion设置为API30或更高,在项目的.csproj文件中查看:

<PropertyGroup>
    <TargetFramework>net7.0-android</TargetFramework>
    <AndroidSdkVersion>33</AndroidSdkVersion>
    <TargetAndroidSdkVersion>33</TargetAndroidSdkVersion>
</PropertyGroup>

确保没有其他自定义输入类型的配置干扰IsPassword属性的生效。

内容的提问来源于stack exchange,提问作者Zoltán Király

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:47:11