2016-06-27 10 views
7

यहाँ मैं एक PopupWindow कैसे बना दिया गया है:PopupWindow पृष्ठभूमि कभी कभी हो जाता है, पारदर्शी और बैंगनी

private static PopupWindow createPopup(FragmentActivity activity, View view) 
{ 
    PopupWindow popup = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); 
    popup.setOutsideTouchable(true); 
    popup.setFocusable(true); 
    popup.setBackgroundDrawable(new ColorDrawable(Tools.getThemeReference(activity, R.attr.main_background_color))); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
     popup.setElevation(Tools.convertDpToPixel(8, activity)); 
    PopupWindowCompat.setOverlapAnchor(popup, true); 

    return popup; 
} 

main_background_color, एक ठोस रंग, सफेद या काले रंग है विषय पर निर्भर करता है। कभी-कभी निम्न होता है:

enter image description here

मैं इस से बच सकते हैं? इसके साथ एमुलेटर में होता है एंड्रॉयड 6 कभी कभी केवल उदाहरण के लिए ... आम तौर पर, PopupWindow पृष्ठभूमि के रूप में हालांकि उम्मीद

साथ ही, यहां मेरी getThemeReference विधि से काम करती है ...

संपादित करें:

public static int getThemeReference(Context context, int attribute) 
{ 
    TypedValue typeValue = new TypedValue(); 
    context.getTheme().resolveAttribute(attribute, typeValue, false); 
    if (typeValue.type == TypedValue.TYPE_REFERENCE) 
    { 
     int ref = typeValue.data; 
     return ref; 
    } 
    else 
    { 
     return -1; 
    } 
} 

संपादित करें 2 - इस समस्या का समाधान हो सकता है: getThemeColorgetThemeReference के बजाय

का उपयोग कर
public static int getThemeColor(Context context, int attribute) 
{ 
    TypedValue typeValue = new TypedValue(); 
    context.getTheme().resolveAttribute(attribute, typeValue, true); 
    if (typeValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typeValue.type <= TypedValue.TYPE_LAST_COLOR_INT) 
    { 
     int color = typeValue.data; 
     return color; 
    } 
    else 
    { 
     return -1; 
    } 
} 
+0

कृपया अपनी 'getThemeReference' विधि पोस्ट करें। –

+0

हो गया। फिर भी, मुझे विश्वास नहीं है कि समस्या का कारण वहां है, क्योंकि इसका मतलब यह होगा कि यह समस्या हमेशा होती है, लेकिन यह केवल दुर्लभ हो रही है (और अब तक, मैंने इसे केवल एंड्रॉइड 6 पर देखा है) – prom85

उत्तर

5

अद्यतन के लिए धन्यवाद, मैंने आपको विधि दिखाने के लिए कहा क्योंकि मैं वास्तव में रंगीन विशेषताओं को पुनर्प्राप्त करने के लिए अपने ऐप्स में एक ही तरह की चीज़ का उपयोग करता हूं, लेकिन हमारी विधियां थोड़ा अलग हैं।

यहाँ मेरा है:

public static int getThemeColor(Context context, int attributeId) { 
    TypedValue typedValue = new TypedValue(); 

    TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[] { attributeId }); 
    int color = a.getColor(0, 0); 

    a.recycle(); 

    return color; 
} 

हालांकि मैं यह वास्तव में समस्या है यकीन नहीं हो सकता है, वहाँ कुछ अपनी टिप्पणी के साथ गलत है। कॉल new ColorDrawable() एक रंग की उम्मीद कर रहा है, संदर्भ नहीं। मैंने कभी-कभी अतीत में भी यह गलती की और अजीब रंग भी प्राप्त किए, क्योंकि सिस्टम एक संदर्भ आईडी के साथ रंग उत्पन्न करने की कोशिश कर रहा था। क्या आपने यह देखने के लिए लाल रंग की असली रंग की कोशिश की है कि आपकी विधि वास्तव में काम करती है या नहीं?

मैं आपकी विधि को किसी भी तरह से बदल दूंगा क्योंकि यह आपको रंग पुनर्प्राप्त करने की गारंटी देता है।

+0

तो आपको लगता है (मैं इसे गलत कर सकता हूं, यह सच है), कि वही डिवाइस और सिस्टम, मेरी विधि के साथ अलग-अलग रंग बनाता है? यह मेरा ऐप चलाने के दौरान होता है। आप पॉपअप खोलते हैं, यह ठीक है, आप डिवाइस को घुमाते हैं, थोपॉप को फिर से खोलते हैं, यह बैंगनी है (यह रंग अनपेक्षित रूप से बदलता है, अधिकांश समय रंग सही होता है) – prom85

+0

बीटीडब्ल्यू, मेरा 'आर.एटर.एमएएन_बैकग्राउंड_ओलोरर' एक संदर्भ है ... यह रंग नहीं है ... मेरे पास एक दूसरा तरीका है, जैसा आपका नाम है ;-)। इसे भी काम करना चाहिए, मैंने इसे अपने प्रश्न में भी पोस्ट किया है ... यह वास्तव में इसलिए हो सकता है क्योंकि मैं पूरी तरह हल किए गए रंग की बजाय रंग संदर्भ पास कर रहा हूं ... – prom85

+0

@ prom85 जैसा कि मैंने कहा, सुनिश्चित नहीं है कि यह होगा कोई फर्क पड़ता है, लेकिन यह कोशिश करने लायक है। आपके द्वारा प्रदान किए गए कोड के बाकी हिस्सों में, मुझे कुछ और नहीं दिख रहा है जो इस समस्या से संबंधित हो सकता है। –

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