2015-09-23 13 views
9

मेरे पास एक ऐसा दृश्य है जो इसमें शामिल फ्रैगमेंट के बाहर कुछ खींचता है और मैंने इसे draw the content outside it using this पर कॉन्फ़िगर किया है।एक्शनबार टैब के ऊपर एक दृश्य/ओवरलैपिंग (जेड-इंडेक्स)

समस्या यह है कि यह हर जगह काम करता है लेकिन एक्शनबार और एक्शनबार टैब पर।

mActionBar.addTab(
    mActionBar.newTab() 
     .setCustomView(t)); 

मैं appCompat का उपयोग कर और टैब इस तरह से जोड़ा जा रहा:

मैं सभी माता पिता दृश्य को android:clipChildren="false" जोड़ा है, लेकिन यह सिर्फ ActionBar और ActionBar टैब के लिए काम नहीं करता।

वांछित दृश्य:

enter image description here लेकिन परिणाम यह है:

enter image description here

+0

बनाने और कस्टम दृश्य बढ़ा-चढ़ाकर पहले कोशिश करें, फिर टैब –

उत्तर

0

मैंने अंततः टैबबार को हटा दिया और टैब के बीच स्विच करने के लिए इसे सरल बटन के साथ बदल दिया और इससे पहले कि कस्टमलायआउट को एक्सएमएल में पहले खींचा जाए।

<LinearLayout 
    .... 
    // tabs layout /> 

<CustomLayout 

.... 
/> 
2

यह पूरा स्रोत कोड के बिना आपकी मदद करने के लिए आसान नहीं है; वैसे भी मैं आपको एक वैकल्पिक दृष्टिकोण सुझा सकता हूं जो आपके मामले के अनुरूप हो सकता है।

आप एक कस्टम चल मद (शायद एक ट्यूटोरियल या एक संकेत के लिए इस्तेमाल किया), आप आधार विचारों पदानुक्रम में परिवर्तन और को करने से बचना चाहिए बना रहे हैं एक शुद्ध ओवरले समाधान पसंद करते हैं।

एक पॉपअप विंडो कि एक मनमाना दृश्य प्रदर्शित करने के लिए इस्तेमाल किया जा सकता:

PopupWindow आपको क्या चाहिए वास्तव में है।

Activity स्तर पर PopupWindow में कार्य करता है के बाद से, यह आपके वर्तमान Activity में सब कुछ उपरिशायी चाहिए।

पॉपअप विंडो एक फ़्लोटिंग कंटेनर है जो वर्तमान गतिविधि के शीर्ष पर दिखाई देता है।

आप एक साधारण उदाहरण here पा सकते हैं।

+0

यह दृश्य विधि OnDraw() में चक्र आ रहा है और यह एक जटिल दृश्य है, तो मैं दृश्य कार्यप्रणाली को बदलने के लिए नहीं करना चाहती। –

+0

आप आधार पदानुक्रम को बदलने से बचने पर जोर दे रहे हैं लेकिन आप रूट विंडो के लिए एक विदेशी दृश्य संलग्न कर रहे हैं। इसके अलावा पॉपअप विंडो उस कंटेनर में तब तक रहेगी जब तक कि इसे स्पष्ट रूप से हटाया न जाए। – wrecker

+0

@Wrecker हां, क्योंकि यह वास्तव में एक अतिव्यापी और असाधारण दृश्य है जो साधारण पेड़ लेआउट से संबंधित नहीं है। आपका समाधान बस खराब है, क्योंकि आप एक अस्थायी दृश्य प्रभाव प्राप्त करने के लिए पदानुक्रम को बदल रहे हैं (और आपको अभी भी गोलाकार दृश्य को हटाना होगा और लेआउट को फिर से समझना होगा)। इस उपयोग के मामले में, एक पॉप-अप विंडो बेहतर तरीके से – bonnyz

0

यह आपके गतिविधि लेआउट के पदानुक्रमित क्रम के कारण होता है। आपके ActionBar को आपके व्यू पर खींचा जा रहा है। आप अपनी गतिविधि के फ्रेम को पा सकते हैं और वहां दृश्य जोड़ सकते हैं।

private void addCircleView() { 
    final FrameLayout frameLayoutRoot = (FrameLayout) getActivity().getWindow() 
     .getDecorView().findViewById(android.R.id.content); 

    View circleView = inflater.inflate(
     R.layout.my_circle_view, frameLayoutRoot, false); 

    ViewGroup.MarginLayoutParams marginLayoutParams = 
     ((ViewGroup.MarginLayoutParams) circleView.getLayoutParams()); 

    marginLayoutParams.topMargin = getStatusBarHeight(getActivity()) 
     + getActivity().getActionBar().getHeight() 
     + getResources().getDimensionPixelSize(R.dimen.your_margin_top_circle); 

    circleView.setLayoutParams(marginLayoutParams); 

    frameLayoutRoot.addView(circleView); 
} 

public int getStatusBarHeight(Context context) { 

    int result = 0; 

    final int resourceId = context.getResources().getIdentifier(
     "status_bar_height", "dimen", "android"); 

    if (resourceId > 0) { 
     result = context.getResources().getDimensionPixelSize(resourceId); 
    } 
    return result; 
} 

जब आप किसी अन्य टुकड़े पर नेविगेट करते हैं तो दृश्य को हटाना भी याद रखें।

frameLayoutRoot.removeView(circleView); 

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

कृपया ध्यान दें कि यह कुछ है कि आप स्तर पर आप ActionBar जोड़ देते हैं, जो गतिविधि है पर करना चाहिए है। उस स्थिति में आपको इन कामकाज की आवश्यकता नहीं होगी। यह सामान ToolBar के साथ प्राप्त करने के लिए और अधिक आसान तरीका है।

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