如何改变xamarin形式的屏幕亮度

时间:2017-12-12 09:47:16

标签: c# xamarin.forms

我在xamarin表格中有qr页面,我想要的是当qr显示时屏幕亮度会更亮,我无法找到解决方案。我在互联网上找到了一些代码,但它返回了一些错误代码消息

已编辑: 我删除了源代码,因为它看起来像是让一些人感到困惑,我尝试的代码是xamarin android,这就是为什么它对我不起作用(我认为xamarin.android和xamarin.forms代码几乎相同,这就是为什么我复制代码并将其粘贴到xamarin表单中并得到一些错误消息)。而现在我真正的问题是如何通过xamarin表单更改屏幕亮度我们可以这样做吗?如果是的话,我可以尝试任何链接,谢谢

2 个答案:

答案 0 :(得分:7)

Xamarin.Forms 不是平台抽象,而是UI抽象。因此,无法访问屏幕亮度等系统服务。我也没有找到NuGet来实现这一目标,因此你必须实现平台特定的类来调整屏幕亮度并通过DependencyService解决。

在PCL中实现界面

public interface IBrightnessService
{
    void SetBrightness(float factor);
}

并使用来自您的公共项目的DependencyService的接口操作到您的平台特定实现

var brightnessService = DependencyService.Get<IBrightnessService>();
brightnessService.SetBrightness(.2);

有关如何使用DependencyService的非常好的紧凑示例,请参阅此页

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction

的Android

您的错误消息

  

非静态字段,方法或属性“Windows.Attribute”

需要Object

表示您尝试访问类型,就像它是一个对象一样。您需要一个存在Window:Window对象的上下文,例如MainActivity就是这种情况。

当你在另一个上下文中时,你需要以某种方式获得Window的实例。

可以预先实现2.5
var window = ((Activity)Forms.Context).Window;

这仍然有效,但已被弃用。无论如何,您可以使用CurrentActivity plugin并使用

获取Window
var window = CrossCurrentActivity.Current.Activity.Window;

source

using Xamarin.Forms;

[assembly: Dependency(typeof (AndroidBrightnessService))]

public class AndroidBrightnessService : IBrightnessService
{
    public void SetBrightness(float brightness)
    {
        var window = CrossCurrentActivity.Current.Activity.Window;
        var attributesWindow = new WindowManagerLayoutParams();

        attributesWindow.CopyFrom (window.Attributes);
        attributesWindow.ScreenBrightness = brightness;

        window.Attributes = attributesWindow;
    }
}

的iOS

使用UIScreen.MainScreen.Brightness调整亮度。

using Xamarin.Forms;
using UIKit;

[assembly: Dependency(typeof (iOSBrightnessService))]

public class iOSBrightnessService : IBrightnessService
{
    public void SetBrightness(float brightness)
    {
        UIScreen.MainScreen.Brightness = brightness;
    }
}

答案 1 :(得分:0)

安卓:

    public void SetBrightness(float brightness)
    {
        Window window = (MainActivity.Instance as Activity).Window;
        var attributesWindow = new WindowManagerLayoutParams();

        attributesWindow.CopyFrom(window.Attributes);
        attributesWindow.ScreenBrightness = brightness;

        window.Attributes = attributesWindow;
    }