2017-07-11 15 views
5
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); 

Yukarıdaki kod, ok rengini değiştirmez. upArrow ColorFilter değeri boş. Bunun nedeni ne olmalı? Çekilebilir rengi nasıl değiştireceğimi sormuyorum. Sorum şu, yukarıdaki kodun renk filtresini ayarlamada başarısız olmasının nedeni nedir? Ana Verimlilik kodu aşağıdadır.SetColorFilter çalışmıyor Xamarin.Android

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(); 
    } 
    } 
+0

Olası kopyalar [Android'de bir çizilebilir renklerini nasıl değiştirilir?] (Https://stackoverflow.com/questions/1309629/how-to- renk-of-a-draw-in-android-android) – Cheesebaron

+0

@Cheesebaron Hayır! Bununla ilgili değil, neden çalışmıyor? – Heshan

+0

"upArrow ColorFilter değeri null.", Kodunuzu sınama için kullandım, boş değil. Android hedef sürümünüz nedir? –

cevap

3

İşte Android 7.1 ve Android 6.0 emülatörü üzerinde çalışıyor SetColorFilter gösteren minimal örnek.

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> 

kodumu ve kod arasındaki fark nedir?

Gerçekte, Destek kitaplığı eşdeğerini kullanmanız gereken iki kullanım dışı yöntem kullanıyorsunuz. ContextCompat.GetColor gibi. İkinci olarak, Resources.GetDrawable yerine AppCompatResources veya ResourcesCompatGetDrawable yöntemini kullanmalısınız.

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

ait
+0

Ana etkinliğim FormsAppCompatActivity'den türetilmiştir ve kodunuzu denediğimde aşağıdaki hatayı verir. Java.Lang.NoSuchMethodError: name = 'getDrawable' imzası = '(I) yöntemi ile hiçbir yöntem yok [Landroid/graphics/drawable/Drawable;' sınıfta Landroid/içerik/Bağlam; – Heshan

+0

Derlemeyi yaptığınızdan emin olun> = API 21: https://developer.android.com/reference/android/content/Context.html#getDrawable(int) –

+0

Soruyu daha fazla kodla güncelledim. Lütfen bir göz at. – Heshan

İlgili konular