2015-09-23 7 views
9

İçeren Parçanın dışında bir şey çizen ve bunu draw the content outside it using this olarak yapılandırdığım bir Görünümüm var.Actionbar sekmelerinin yukarısındaki bir görünümü Yerleştirme/Örtüşen (z-index)

Sorun, her yerde ancak ActionBar ve ActionBar Sekmelerde çalışmasıdır.

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

Ben AppCompat kullanarak ve sekmeyi bu şekilde ekliyorum:

Ben tüm üst Görünümler'e android:clipChildren="false" eklendi, ama sadece İşlem Çubuğu ve İşlem Çubuğu sekmeler için çalışmaz.

istenen görünüm:

enter image description here Ama sonuç şudur:

Bu tam kaynak kodu olmadan size yardım etmek kolay değil

enter image description here

+0

oluşturma ve birinci özel bir görünüm şişirme deneyin, ardından sekmeleri –

cevap

0

Sonunda tabBar'ı kaldırdım ve sekmeler arasında geçiş yapmak için basit düğmelerle değiştirdim ve önce xml'de CustomLayout öğesinin önüne çıkarılması için yerleştirildi.

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

<CustomLayout 

.... 
/> 
2

; Her halükarda, sizin durumunuza uygun alternatif bir yaklaşım önerebilirim.

Eğer (belki bir öğretici veya ipucu için kullanılır) özel bir yüzer madde, baz görünümleri hiyerarşiyi değiştirmek ve kaçınmalıdır oluşturuyorsanız bir saf bindirme çözüm tercih ederim. keyfi bir görünümünü görüntülemek için kullanılabilir

bir pop-up penceresi:

PopupWindow ihtiyacınız tam olarak budur. Activity seviyesinde PopupWindow görev yaptığından dolayı

, bunun geçerli Activity her şeyi bindirmek gerekir.

Açılır pencere, etkinliğinin en üstünde görünen yüzen bir kapsayıcıdır.

Basit bir örnek here bulabilirsiniz.

+0

Bu, onDraw() yönteminde daire çizim ve bu kompleks bir görünüştür, bu yüzden görünüşüdür fonksiyonlarını değiştirmek için istemiyoruz. –

+0

Temel hiyerarşiyi değiştirmekten kaçınmakta ısrar ediyorsunuz, ancak kök penceresine yabancı bir görünüm ekliyorsunuz. Ayrıca açık pencere kaldırılıncaya kadar açılan pencerede açılır. – wrecker

+0

@wrecker Evet, aslında sıradan ağaç düzeniyle ilgili olmayan örtüşen ve kendine özgü bir görünüm olduğu için. Çözümünüz sadece kötüdür, çünkü geçici bir görünürlük efekti elde etmek için hiyerarşiyi değiştiriyorsunuz (ve hala yuvarlatılmış görünümü kaldırmanız ve düzeni yeniden hesaplamanız gerekiyor). Bu kullanım durumu için, bir pop-up penceresi daha iyi – bonnyz

0

Bu, etkinlik düzeninizin hiyerarşik sırası nedeniyle gerçekleşir. ActionBar Sayfanız, Görünümünüzün üzerine çekiliyor. Etkinliğinizin çerçevesini bulabilir ve görünümü buraya ekleyebilirsiniz. Bir diğer parçasına uzakta gittiğinizde

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; 
} 

Ayrıca görünümünü kaldırmak unutmayın.

frameLayoutRoot.removeView(circleView); 

Düzenleme:

bu faaliyettir sen ActionBar eklemek düzeyinde yapıyor olması gereken bir şey olduğuna dikkat edin. Bu durumda, bu geçici çözümlere ihtiyacınız olmaz. Bu şeyler ToolBar ile elde etmek için daha basit.

İlgili konular