gpt4 book ai didi

c# - SetColorFilter 在 Xamarin.Android 中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:34 26 4
gpt4 key购买 nike

var upArrow = Resources.GetDrawable(Resource.Drawable.abc_ic_ab_back_material);
upArrow.SetColorFilter(Resources.GetColor(Android.Resource.Color.White), PorterDuff.Mode.SrcIn);
SupportActionBar.SetHomeAsUpIndicator(upArrow);

上面的代码并没有改变箭头的颜色。 upArrow ColorFilter 值为空。这应该是什么原因呢?我不是在问如何更改可绘制颜色。我的问题是为什么上面的代码无法设置滤色器?以下是 MainActivity 代码。

public class MvxFormsApplicationActivity : FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);

Xamarin.Forms.Forms.Init(this, bundle); ;
//Plugins.NewictLib.Forms.Android.Renderers.GifImageViewRenderer.Init ();
DLToolkit.Forms.Controls.FlowListView.Init ();
UserDialogs.Init ((Activity) Xamarin.Forms.Forms.Context);

OxyPlot.Xamarin.Forms.Platform.Android.PlotViewRenderer.Init();

// var mvxFormsApp = new MvxFormsApp ();
// LoadApplication (mvxFormsApp);
var myApp = new MyFormsApp();
LoadApplication (myApp );
AppCompatDelegate.CompatVectorFromResourcesEnabled = true;
//the following needs to set so that the back button color can be changed
var upArrow = Resources.GetDrawable(Resource.Drawable.abc_ic_ab_back_material);
upArrow.SetColorFilter(Resources.GetColor(Android.Resource.Color.White), PorterDuff.Mode.SrcIn);
SupportActionBar.SetHomeAsUpIndicator(upArrow);

if (IsPlayServicesAvailable())
{
var intent = new Intent(this, typeof(RegistrationIntentService));
StartService(intent);
}
//var presenter = Mvx.Resolve<IMvxViewPresenter>() as MvxFormsDroidMasterDetailPagePresenter;
var presenter = Mvx.Resolve <IMvxViewPresenter> () as MVxFormsDroidCustomPagePresenter;//MvxFormsDroidPagePresenter;
if ( presenter == null ) {
throw new ArgumentNullException (nameof(presenter), "MvxFormsApplicationActivity: Please check your Activity class and ensure the presenter has value");
}
//presenter.MvxFormsApp = mvxFormsApp;
presenter.MvxFormsApp = oznesFormsApp;
Mvx.Resolve<IMvxAppStart>().Start();
}
}

最佳答案

这是一个演示 SetColorFilter 在 Android 7.1 和 Android 6.0 模拟器上运行的最小示例。

MainActivity.cs

[Activity(Label = "App39", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);

var upArrow = AppCompatResources.GetDrawable(this, Resource.Drawable.abc_ic_ab_back_material);
upArrow.SetColorFilter(new Color(ContextCompat.GetColor(this, Android.Resource.Color.HoloBlueBright)), PorterDuff.Mode.SrcIn);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetHomeAsUpIndicator(upArrow);

Button b = FindViewById<Button>(Resource.Id.button);
b.Click += B_Click;
}

private void B_Click(object sender, System.EventArgs e)
{
Intent i = new Intent(this, typeof(MainActivity));
StartActivity(i);
}
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App39.App39" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="16" />
<application android:label="App39" android:theme="@style/Theme.AppCompat.Light"></application>
</manifest>

我的代码和你们的代码有什么区别?

您使用的是两种已弃用的方法,实际上,您应该使用等效的支持库。如ContextCompat.GetColor。其次,您应该使用 AppCompatResourcesResourcesCompat GetDrawable 方法而不是 Resources.GetDrawable

https://developer.android.com/reference/android/support/v7/content/res/AppCompatResources.html#getDrawable(android.content.Context, int)

https://developer.android.com/reference/android/support/v4/content/res/ResourcesCompat.html#getDrawable(android.content.res.Resources, int, android.content.res.Resources.Theme)

Android API 25

关于c# - SetColorFilter 在 Xamarin.Android 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com