2017-07-11 10 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); 

उपर्युक्त कोड तीर रंग नहीं बदलता है। upArrow ColorFilter मान शून्य है। इसका कारण क्या होना चाहिए? मैं नहीं पूछ रहा हूं कि कैसे आकर्षित रंग बदलना है। मेरा सवाल यह है कि उपर्युक्त कोड रंग फ़िल्टर सेट करने में विफल क्यों होता है? मुख्य एक्टिविटी कोड निम्नलिखित है।SetColorFilter Xamarin में काम नहीं कर रहा है। एंड्रॉइड

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

संभावित डुप्लिकेट [एंड्रॉयड में एक Drawable का रंग बदलने के लिए?] (Https://stackoverflow.com/questions/1309629/how-to- चेंज-रंग-ऑफ-ड्रा-इन-एंड्रॉइड) – Cheesebaron

+0

@ चेसबरन नहीं! यह इस बारे में नहीं है कि यह क्यों काम नहीं कर रहा है। – Heshan

+0

"upArrow ColorFilter मान शून्य है।", मैंने परीक्षण के लिए आपका कोड इस्तेमाल किया, यह मेरी तरफ से शून्य नहीं है। आपका एंड्रॉइड लक्ष्य संस्करण क्या है? –

उत्तर

3

यहाँ एक न्यूनतम नमूना SetColorFilter का प्रदर्शन एक एंड्रॉयड 7.1 और एंड्रॉयड 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। दूसरा, आपको AppCompatResources या ResourcesCompatGetDrawable विधि 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

की
+0

मेरी मुख्य गतिविधि FormsAppCompatActivity से निकली है और जब मैं आपका कोड आज़माता हूं तो यह निम्न त्रुटि देता है। Java.Lang.NoSuchMethodError: नाम के साथ कोई विधि नहीं = 'getDrawable' signature = '(i) लैंड्रॉइड/ग्राफिक्स/ड्रायबल/ड्रायबल;' कक्षा में लैंड्रॉइड/सामग्री/संदर्भ; – Heshan

+0

सुनिश्चित करें कि आप संकलित कर रहे हैं> = API 21: https://developer.android.com/reference/android/content/Context.html#getDrawable(int) –

+0

मैंने प्रश्न को और कोड के साथ अपडेट किया है। कृपया एक नज़र डालें। – Heshan

संबंधित मुद्दे