#c# #android #xamarin #statusbar
#c# #Android #xamarin #Строка состояния
Вопрос:
Я прочитал несколько сообщений здесь, и ни одно из них не является именно тем, что я ищу. Они помогли мне пройти долгий путь, но у меня есть одна проблема, которую мне все еще нужно решить.
Я использую Xamarin для Android и в настоящее время ориентируюсь на API уровня 14 и выше.
У меня есть следующий код (C # и Xamarin)
IWindowManager windowManager;
WindowManagerLayoutParams parm = null;
View statusBarView = new View(this);
windowManager = GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
statusBarView.SetBackgroundColor(Color.Green);
parm = new WindowManagerLayoutParams(WindowManagerLayoutParams.FillParent, 400,
WindowManagerTypes.SystemOverlay,
WindowManagerFlags.LayoutNoLimits,
Format.Transparent);
parm.Gravity = GravityFlags.Top;
windowManager.AddView(statusBarView, parm);
Примечание: 400 — это просто число, которое я ввел туда для тестирования, я фактически получу фактическую высоту строки состояния.
Это отображается просто отлично, но пользователь все равно может перейти к панели уведомлений. Существует несколько приложений, которые делают то, что я ищу, мне просто нужна помощь с последним кусочком головоломки.
Эта часть о том, как предотвратить попадание событий касания в текущую строку состояния.
Мы высоко ценим любую помощь!
Ответ №1:
Вы хотите скрыть строку состояния? Если да, https://developer.android.com/training/system-ui/status.html
Комментарии:
1. Это по-прежнему позволяет пользователю получить доступ к строке по умолчанию. Мне нужно заменить существующую.
2. Я не думаю, что вы можете удалить его без root (для этого nova требуется root, если я правильно помню).
Ответ №2:
Если вы хотите отключить строку состояния, используйте это
protected override void OnCreate(Bundle bundle)
{
customViewGroup view = new customViewGroup(this);
WindowManagerLayoutParams localLayoutParams = new WindowManagerLayoutParams();
localLayoutParams.Type = WindowManagerTypes.SystemError;
localLayoutParams.Gravity = GravityFlags.Top;
localLayoutParams.Flags = WindowManagerFlags.NotFocusable |
WindowManagerFlags.NotTouchModal | WindowManagerFlags.LayoutInScreen;
localLayoutParams.Width = WindowManagerLayoutParams.MatchParent;
localLayoutParams.Height = (int)(50 * Resources.DisplayMetrics.ScaledDensity);
localLayoutParams.Format = Format.Transparent;
manager.AddView(view, localLayoutParams);
}
public class customViewGroup : ViewGroup
{
public customViewGroup(Context context) : base(context)
{
}
public override bool OnTouchEvent(MotionEvent ev)
{
return true;
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
// throw new NotImplementedException();
}
}
Для повторного включения используйте
manager.RemoveView(view);