【发布时间】:2019-12-31 17:31:07
【问题描述】:
我想在输入文本完成后隐藏软件按钮。当用户将手指放在键盘外时,会调用此方法:
public override void OnUserInteraction()
{
base.OnUserInteraction();
HideSoftwareMenuBars();
}
效果很好:
private void HideSoftwareMenuBars()
{
try
{
int uiOptions = (int)Window.DecorView.SystemUiVisibility;
uiOptions |= (int)SystemUiFlags.LayoutStable;
uiOptions |= (int)SystemUiFlags.LayoutHideNavigation;
uiOptions |= (int)SystemUiFlags.LayoutFullscreen;
uiOptions |= (int)SystemUiFlags.LowProfile;
uiOptions |= (int)SystemUiFlags.HideNavigation;
uiOptions |= (int)SystemUiFlags.Fullscreen;
uiOptions |= (int)SystemUiFlags.ImmersiveSticky;
this.Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;
}
catch (System.Exception Ex)
{
}
}
但是 MainActivity.cs 中没有方法可以覆盖当用户按下键盘上的“enter”键时调用的方法。我已经覆盖了 200 多种方法来检查它。然后在 Xamarin.Forms 后面的代码中我有事件:
private void Entry_Unfocused(object sender, FocusEventArgs e)
{
DependencyService.Get<ISoftwareButtons>().HideSoftwareMenuBars();
}
然后通过调用依赖接口,这里我有2个错误:
[assembly: Dependency(typeof(SoftwareButtonsHandler))]
namespace Channel.Droid.DependencyHandlers
{
public class SoftwareButtonsHandler
{
private void HideSoftwareMenuBars()
{
try
{
int uiOptions = (int) Window.DecorView.SystemUiVisibility;
uiOptions |= (int)SystemUiFlags.LayoutStable;
uiOptions |= (int)SystemUiFlags.LayoutHideNavigation;
uiOptions |= (int)SystemUiFlags.LayoutFullscreen;
uiOptions |= (int)SystemUiFlags.LowProfile;
uiOptions |= (int)SystemUiFlags.HideNavigation;
uiOptions |= (int)SystemUiFlags.Fullscreen;
uiOptions |= (int)SystemUiFlags.ImmersiveSticky;
this.Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;
}
catch (System.Exception Ex)
{
}
}
}
}
问题是“Window.Devorview”有错误:
“顶级窗口外观和行为策略的抽象基类。 非静态字段、方法或对象需要对象引用 属性 'Window.DecorView;"
和“this.Window”
"SoftwareButtonsHandler' 不包含 'Window' 的定义和 没有可访问的扩展方法“窗口”接受第一个参数 可以找到类型“SoftwareButtonsHandler”(您是否缺少使用 指令还是程序集引用?”
有没有办法从另一个类调用 MainActivity.cs 的方法或在依赖处理程序中获取必要的“窗口”(只能在 MainActivity.cs 中访问)?
【问题讨论】:
标签: xamarin xamarin.forms xamarin.android