2016-10-06 6 views
7

मैंने एक कस्टम घटक बनाया है जो सामग्री दृश्य और प्रस्तुतकर्ता को विस्तारित करता है जो एंड्रॉइड पर कार्डव्यू को प्रस्तुत करता है।एंड्रॉइड कार्डव्यू के लिए कस्टम रेंडरर प्रपत्र घटक सामग्री नहीं दिखा रहा है

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि प्रपत्र सामग्री कार्डव्यू के नीचे प्रदान की जाती है। किटकैट पर ऐसा नहीं होता है, लेकिन मुझे लगता है कि कार्डव्यू कार्यान्वयन लॉलीपॉप या नए जैसा नहीं है।

कार्डव्यू के पृष्ठभूमि रंग को पारदर्शी (0x00000000) पर सेट करना कार्डव्यू के नीचे की सामग्री को प्रकट करता है।

रूपों घटक:

using Xamarin.Forms; 

namespace CodeFest 
{ 
    public class NativeClientProfile : ContentView 
    { 
     public NativeClientProfile() 
     { 
      var grid = new Grid 
      { 
       RowDefinitions = new RowDefinitionCollection {new RowDefinition()}, 
       ColumnDefinitions = new ColumnDefinitionCollection {new ColumnDefinition(), new ColumnDefinition()} 
      }; 
      grid.Children.Add(new Label {Text = "FSP No"}, 0, 0); 
      grid.Children.Add(new Label {Text = "12345", HorizontalTextAlignment = TextAlignment.Center}, 1, 0); 
      grid.Children.Add(new Label {Text = "Risk"}, 0, 1); 
      grid.Children.Add(
       new Label {Text = "Low", TextColor = Color.Green, HorizontalTextAlignment = TextAlignment.Center}, 1, 1); 
      var item = new Label 
      { 
       Text = "Foo bar", 
       HorizontalTextAlignment = TextAlignment.Center, 
       FontSize = 30, 
       FontAttributes = FontAttributes.Bold 
      }; 
      Content = new StackLayout 
      { 
       Children = 
       { 
        item, 
        new Label 
        { 
         Text = "Financial Services Provider", 
         HorizontalTextAlignment = TextAlignment.Center 
        }, 
        grid 
       } 
      }; 
     } 
    } 
} 

कस्टम रेंडरर:

using Android.Support.V7.Widget; 
using Android.Text; 
using Android.Views; 
using CodeFest; 
using CodeFest.Droid.ComponentRenderers; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 

[assembly: ExportRenderer(typeof(NativeClientProfile), typeof(NativeClientProfileRenderer))] 
namespace CodeFest.Droid.ComponentRenderers 
{ 
    class NativeClientProfileRenderer : ViewRenderer<NativeClientProfile, CardView> 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<NativeClientProfile> elementChangedEventArgs) 
     { 
      var view = new CardView(Context); 
      //view.SetCardBackgroundColor(0x00000000); 
      SetNativeControl(view); 
     } 
    } 
} 

मैं कैसे सही ढंग से एक CardView कस्टम रेंडरर भीतर रूपों घटकों रेंडर करने के लिए का एक उदाहरण के लिए देख रहा हूँ।

+0

कार्डव्यू आमतौर पर रीसाइक्लिंग व्यू के साथ उपयोग किया जाता है। क्या आप इसे RecyclerView के बाहर उपयोग करना चाहते हैं? यदि यह स्टैंडअलोन व्यू है तो आपको कार्डव्यू की आवश्यकता क्यों है? –

उत्तर

1

आप का उपयोग ContentView के बजाय बेस क्लास के रूप में कर सकते हैं। इसका लाभ है, कि आप मौजूदा FrameRendererXamarin.Forms.Platform.Android.AppCompat का उपयोग कर सकते हैं जो पहले से ही CardView का उपयोग कर रहा है। (देखें: FrameRenderer.cs)।

FrameRenderer घोषणा

public class FrameRenderer : CardView, IVisualElementRenderer, AView.IOnClickListener, AView.IOnTouchListener 

प्रतिपादक

class NativeClientProfileRenderer : Xamarin.Forms.Platform.Android.AppCompat.FrameRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Frame> e) 
    { 
     base.OnElementChanged(e); 
    } 
} 

NativeClientProfile

public class NativeClientProfile : Frame 
{ 
    public NativeClientProfile() 
    { 
     // your stuff... 
     Content = new StackLayout 
     { 
      Children = 
      { 
       item, 
       new Label 
       { 
        Text = "Financial Services Provider", 
        HorizontalTextAlignment = TextAlignment.Center 
       }, 
       grid 
      } 
     }; 
    } 
} 

चर्चा

रेंडरर यह क्या जरूरत है यदि आप वास्तव में इसे मैन्युअल रूप से करना चाहते हैं आपको पता चलता है। फ़्रेमरेंडर का उपयोग करके आपका कोड Xamarin के कार्यान्वयन पर निर्भर करता है। यदि वे कभी भी Frame के लिए प्रस्तुत किए गए दृश्य को बदलते हैं तो यह आपके ऐप को तोड़ देगा। लेकिन अगर आप फ्रेम रेन्डरर के कार्यान्वयन पर एक नज़र डालते हैं, तो मैं इसे पूरी तरह से स्क्रैच (सरल जोखिम बनाम प्रयास मूल्यांकन) से बनाने से बचने की कोशिश करता हूं।

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