アイキャッチ画像

【Android】.Net MAUIでEntry以外のソフトキーボードを非表示にする方法

.Net MAUIではソフトキーボードを非表示にする方法として、HideSoftInputAsyncが用意されています。しかし、この方法はEntryだけしか利用できません。

当記事では、Entry以外でもソフトキーボードを非表示にする方法を紹介していきます。

紹介環境

当記事は以下の環境で作成しています。

開発環境

  • Visual Studio 2026
  • .Net 10
  • Android 14

対応方法

Androidでキーボードを非表示にする場合、InputMethodManagerを利用します。

実装例は以下のようになります。PlatformViewからプラットフォームのビューを取得して、WindowTokenを取得するようにしています。

// プラットフォームのビューを取得します。
// 「sample」は、XAMLで定義されたコントロールの名前です。適切なコントロール名に置き換えてください。
if (sample.Handler?.PlatformView is Android.Views.View view)
{
    // キーボードを閉じる
    InputMethodManager? inputMethodManager = Platform.AppContext.GetSystemService(Context.InputMethodService) as InputMethodManager;
    inputMethodManager?.HideSoftInputFromWindow(view.WindowToken, HideSoftInputFlags.None);
}

利用方法

利用方法は、以下のようになります。ここではWebViewを利用しています。

<?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="SampleApp.Pages.SamplePage1"
             Title="SamplePage1">
    <Grid RowDefinitions="auto,*">
        <Button
            Grid.Row="0"
            Text="キーボードを閉じる"
            Clicked="Button_Clicked" />
        <WebView
            Grid.Row="1"
            x:Name="sample">
            <WebView.Source>
                <HtmlWebViewSource>
                    <HtmlWebViewSource.Html>
                        <![CDATA[ <input type="text" /> ]]>
                    </HtmlWebViewSource.Html>
                </HtmlWebViewSource>
            </WebView.Source>
        </WebView>
    </Grid>
</ContentPage>
#if ANDROID

using Android.Content;
using Android.Views.InputMethods;

#endif

// 名前空間はプロジェクトに合わせてください。
namespace SampleApp.Pages;

public partial class SamplePage1 : ContentPage
{
    public SamplePage1()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
#if ANDROID
        // プラットフォームのビューを取得します。
        // 「sample」は、XAMLで定義されたコントロールの名前です。適切なコントロール名に置き換えてください。
        if (sample.Handler?.PlatformView is Android.Views.View view)
        {
            // キーボードを閉じる
            InputMethodManager? inputMethodManager = Platform.AppContext.GetSystemService(Context.InputMethodService) as InputMethodManager;
            inputMethodManager?.HideSoftInputFromWindow(view.WindowToken, HideSoftInputFlags.None);
        }
#endif
    }
}

動作イメージ

動作イメージ

終わりに

Androidの時だけキーボードが残ってしまうことがあり、今回の方法で対応してみました。この記事が役に立てば幸いです。