我的实际应用程序是在 HID 模式下使用蓝牙扫描仪并捕获 MainActivity 的 DispatchKeyEvent 上的输入。 它工作得很好,除了屏幕变暗为一些深色不透明颜色,看起来一切都被禁用,你必须导航回带有输入控件的页面并点击它才能使屏幕恢复正常。
在库存模板中并不那么明显,但在我的实际应用程序中(底部的屏幕截图),变暗非常明显;这是一个非常引人注目的蓝灰色不透明覆盖层。 我不知道为什么会这样。 如果我的实际应用程序像默认表单示例一样变暗,我几乎会很高兴。
步骤:
结果: 屏幕变暗,软键盘不弹出。
后续步骤:
我想要什么:
这是默认表单应用程序的屏幕截图:
不暗淡:
按下键盘后变暗:
我的实际测试设备是运行Android 10.0的三星Galaxy XCover Pro。 我正在致力于将本机 Xamarin Android 应用程序移植到 Forms,以便我们也可以在 iOS 上运行它。 我的 Android 应用程序从未遇到过这个问题,而且我不知道如何追踪发生的情况。
这是之前的照片。 我有一个重点关注的输入字段。
用我的蓝牙扫描仪扫描条形码后,会发生这种情况:
XAML 中没有定义任何覆盖/模态框视图。 覆盖层不是我添加的。 虽然我似乎做了一些影响颜色的事情;我在 styles.xml 文件中没有看到任何会更改默认浅灰色颜色的内容(如示例 Xamrin Forms 模板中所示)。
我可以使用扫描仪在“欢迎使用 Xamaring Forms!”上重现此内容。此外,屏幕截图并没有真正显示覆盖颜色的变化;它更加微妙;我真的很想知道为什么在我的应用程序中叠加层如此明显。
我仍然对这种事发生感到恼火。 但以防万一其他人使用 硬件键盘作为输入(或作为 HID 连接的 BT 扫描仪),并且您认为您会很喜欢并覆盖默认样式之一并使用漂亮的绿色强调色,如下所示:(尽管 StubbleOverlayColor 已更改为粉红色只是为了使当然我发现了这个问题)-不要这样做。
<!-- Base theme applied regardless of API level -->
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">@color/stupidOverlayColor</item>
</style>
这个故事的寓意是“colorControlHighlight”是邪恶的,不能被覆盖并与硬件键盘一起使用,除非您希望您的应用程序认为在扫描条形码后整个屏幕应该获得突出显示颜色,如下所示:
是的,这很烦人,尤其是在使用外部条形码扫描仪时。我在你的答案中找到了一个解决方案,我用 android 的透明颜色替换了 colorControlHighlight 。
<item name="colorControlHighlight">@android:color/transparent</item>
这是显而易见的解决方案,而且很快。它会发生,但用户不会看到它。它 适合我。
发生了同样的问题,但是是在 MAUI(适用于 Android)中。还使用条形码扫描仪。 解决办法是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme">
<item name="android:colorControlHighlight">@android:color/transparent</item>
</style>
</resources>
namespace MyApp
{
[Activity(Theme = "@style/AppTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
}
}
感谢 @Nikola 和 @nitewulf50 的提示。