#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;
}
};
}
Я не знаю, почему это происходит, пожалуйста, помогите.