SetColorFilter does not work in Xamarin.Android

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); 

The code above does not change the color of the arrow. The value of upArrow ColorFilter is null. What should be the reason for this? I do not ask how to change the drop-down color. My question is why the above code cannot set the color filter? Below is the MainActivity code.

 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(); } } 
+5
source share
1 answer

Here is a minimal sample demonstrating SetColorFilter working on Android 7.1 and Android 6.0 emulator.

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> 

What is the difference between my code and code?

You are using two deprecated methods, which in fact you should use the equivalent of a support library. For example, ContextCompat.GetColor . Secondly, you should use the AppCompatResources or ResourcesCompat GetDrawable instead of 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

+3
source

Source: https://habr.com/ru/post/1269708/


All Articles