Перезапуск активности при подключении или отсоединении внешней клавиатуры (через OTG-кабель) и панели навигации внизу (с помощью клавиши переключения клавиатуры) Отображается

#android-activity #keyboard #fullscreen #restart #navigationbar

#android-активность #клавиатура #полноэкранный режим #перезапуск #панель навигации

Вопрос:

Я создаю приложение для Android на xamarin. Я использую веб-просмотр для отображения веб-сайта. Чтобы ввести ввод в текстовое поле, я создал пользовательские клавиатуры, поэтому я должен сохранить свое приложение в полноэкранном режиме. Я справился с этим, и мое приложение работает должным образом.

Но проблема возникает, когда пользователь подключает внешнюю клавиатуру (с помощью OTG-кабеля).

1. Моя активность перезапускается, когда я подключаю или отсоединяю внешнюю клавиатуру.

Я попробовал следующий код, чтобы предотвратить перезапуск активности

(a) Я написал следующий код в AndroidManifest.xml

 <application android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:label="ABC" android:icon="@drawable/AppIcon"></application>
  

(б) Я добавил атрибут к действию

 [Activity (Label = "ABC",Icon = "@drawable/AppIcon", ConfigurationChanges = ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden|ConfigChanges.ScreenSize,ScreenOrientation = ScreenOrientation.Landscape)]          
public class HomeActivity : Activity
{}
  

2. Панель навигации с клавишей переключения клавиатуры отображается, когда я что-то печатаю с внешней клавиатуры

Для этого я написал следующий код.

 public static SystemUiFlags flags = (SystemUiFlags.Visible | SystemUiFlags.LayoutHideNavigation | SystemUiFlags.LayoutFullscreen | SystemUiFlags.HideNavigation |
       SystemUiFlags.Fullscreen | SystemUiFlags.ImmersiveSticky);
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        //hide action bar and title bar
        HideActionBarAndTitleBar(this);
        //set view for activity
        SetContentView(Resource.Layout.activity_layout_home);

        HideNaviagtionBar(this);

        Window.DecorView.SystemUiVisibilityChange  = (sender, e) =>
        {
            Window.DecorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)Global.flags;
        };

    }
    public override void OnWindowFocusChanged(bool hasFocus)
    {
        base.OnWindowFocusChanged(hasFocus);
        Window.DecorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)Global.flags;

    }
    public static void HideActionBarAndTitleBar(Activity activity)
    {
        //Remove title bar
        activity.RequestWindowFeature(WindowFeatures.NoTitle);
        //Remove notification bar
        activity.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);
    }
    public static void HideNaviagtionBar(Activity activity)
    {
        View decorView = activity.Window.DecorView;
        decorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)flags;

        decorView.SystemUiVisibilityChange  = (object sender, View.SystemUiVisibilityChangeEventArgs e) =>
        {
            if (e.Visibility == (Android.Views.StatusBarVisibility)SystemUiFlags.Visible amp;amp; SystemUiFlags.Fullscreen == SystemUiFlags.Visible)
            {
                decorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)flags;
            }
        };
    }
  

Я не знаю, почему это происходит, пожалуйста, помогите.