Xamarin Forms - 当不存在输入控件时,物理键盘会变暗页面

问题描述 投票:0回答:3

我的实际应用程序是在 HID 模式下使用蓝牙扫描仪并捕获 MainActivity 的 DispatchKeyEvent 上的输入。 它工作得很好,除了屏幕变暗为一些深色不透明颜色,看起来一切都被禁用,你必须导航回带有输入控件的页面并点击它才能使屏幕恢复正常。

在库存模板中并不那么明显,但在我的实际应用程序中(底部的屏幕截图),变暗非常明显;这是一个非常引人注目的蓝灰色不透明覆盖层。 我不知道为什么会这样。 如果我的实际应用程序像默认表单示例一样变暗,我几乎会很高兴。

步骤:

  1. 从模板之一制作 Xamarin Forms 应用程序。
  2. 什么都不改变。
  3. 运行模拟器。
  4. 按下键盘上的按钮。

结果: 屏幕变暗,软键盘不弹出。

后续步骤:

  1. 添加输入控件。 < Entry/> 就可以了。
  2. 单击它,屏幕会重新变亮。
  3. 删除< Entry/>
  4. 按下键盘上的某个键,软键盘就会弹出,屏幕不会再变暗。

我想要什么:

  1. 了解暗淡/覆盖颜色/不透明度的设置位置,以便我可以更改它。
  2. 根本不允许软键盘尝试弹出,除非有一个具有焦点的输入字段。

这是默认表单应用程序的屏幕截图:

不暗淡:

Not Dim

按下键盘后变暗:

Dim

我的实际测试设备是运行Android 10.0的三星Galaxy XCover Pro。 我正在致力于将本机 Xamarin Android 应用程序移植到 Forms,以便我们也可以在 iOS 上运行它。 我的 Android 应用程序从未遇到过这个问题,而且我不知道如何追踪发生的情况。

这是之前的照片。 我有一个重点关注的输入字段。

before scan

用我的蓝牙扫描仪扫描条形码后,会发生这种情况:

dim after scanning

XAML 中没有定义任何覆盖/模态框视图。 覆盖层不是我添加的。 虽然我似乎做了一些影响颜色的事情;我在 styles.xml 文件中没有看到任何会更改默认浅灰色颜色的内容(如示例 Xamrin Forms 模板中所示)。

我可以使用扫描仪在“欢迎使用 Xamaring Forms!”上重现此内容。此外,屏幕截图并没有真正显示覆盖颜色的变化;它更加微妙;我真的很想知道为什么在我的应用程序中叠加层如此明显。

xamarin xamarin.forms keyboard focus
3个回答
3
投票

我仍然对这种事发生感到恼火。 但以防万一其他人使用 硬件键盘作为输入(或作为 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”是邪恶的,不能被覆盖并与硬件键盘一起使用,除非您希望您的应用程序认为在扫描条形码后整个屏幕应该获得突出显示颜色,如下所示:

enter image description here


1
投票

是的,这很烦人,尤其是在使用外部条形码扫描仪时。我在你的答案中找到了一个解决方案,我用 android 的透明颜色替换了 colorControlHighlight 。

<item name="colorControlHighlight">@android:color/transparent</item>

这是显而易见的解决方案,而且很快。它会发生,但用户不会看到它。它 适合我。


0
投票

发生了同样的问题,但是是在 MAUI(适用于 Android)中。还使用条形码扫描仪。 解决办法是:

  1. 在“Platforms\Android\Resources alues”文件夹中创建一个styles.xml文件。
  2. 向创建的文件添加样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme">
        <item name="android:colorControlHighlight">@android:color/transparent</item>
    </style>
</resources>
  1. 在 Platforms\Android\MainActivity.cs 类文件中,我检查是否使用了所需的样式(Theme =“@style/AppTheme”)
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 的提示。

© www.soinside.com 2019 - 2024. All rights reserved.