Wie legen Sie die Trennlinie zwischen Tabs in TabLayout der Design-Support-Bibliothek?

Ich verwende das neue android.support.design.widget.TabLayout der v7-appcompat Bibliothek und habe ein Problem gefunden. Es gibt keine Möglichkeit, den Teiler zwischen den Tabs zu setzen, weiß nicht, ob es da ist.

Ich habe den Pager-Adapter erfolgreich konfiguriert und die Registerkarten sehen gut aus, aber ich kann die Trennlinie zwischen den Registerkarten nicht festlegen.

Ich möchte diese Art von Tabs

 Tab1 | Tab2 | Tab3 

aber derzeit zeigt es sich

 Tab1 Tab2 Tab3 

Mein XML ist

        

Ich füge Tabs hinzu

 viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setOffscreenPageLimit(2); adapter = new TabAdapterLoginActivity(getSupportFragmentManager(), titles); viewPager.setAdapter(adapter); tabLayout = (TabLayout) findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); 

   

    Es gibt eine Möglichkeit, mithilfe der Tab setCustomView-Methode einen Teiler hinzuzufügen:

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); for (int i = 0; i < tabLayout.getTabCount(); i++) { TabLayout.Tab tab = tabLayout.getTabAt(i); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout, tabLayout, false); TextView tabTextView = (TextView) relativeLayout.findViewById(R.id.tab_title); tabTextView.setText(tab.getText()); tab.setCustomView(relativeLayout); tab.select(); } 

    Tab benutzerdefiniertes Layout mit Teiler (tab_layout.xml):

     < ?xml version="1.0" encoding="utf-8"?>       

    Setzen Sie den Tabulator "TabLayout" horizontal auf 0dp :

      

    Und ein Selektor für Tab-Titel Textfarbe, wenn es ausgewählt ist (tab_item_selector.xml):

     < ?xml version="1.0" encoding="utf-8"?>       

    TabLayout ist eigentlich HorizontalScrollView und das erste Kind ist LinearLayout .

    Verwenden Sie einfach den unteren Code, um Teiler hinzuzufügen

      View root = tabLayout.getChildAt(0); if (root instanceof LinearLayout) { ((LinearLayout) root).setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); GradientDrawable drawable = new GradientDrawable(); drawable.setColor(getResources().getColor(R.color.separator)); drawable.setSize(2, 1); ((LinearLayout) root).setDividerPadding(10); ((LinearLayout) root).setDividerDrawable(drawable); } 

    Unten ist der Beispielbildschirm

    Bildschirm 1 Bildbeschreibung hier eingeben

    Bildschirm 2 Bildbeschreibung hier eingeben

    Hallo, Sie können dies als Workaround versuchen, was ich wie folgt getan habe:

    1 – Erstellen Sie ein normales Tablayout.

    2 – Stellen Sie den Modus MODE_FIXED ein

    2-hinzufügen es in framelayout und darüber fügen lineare Layout Horizont.

    Fügen Sie Schaltflächen im horizontalen Layout als Anzahl der Registerkarten hinzu und machen Sie die Schaltflächen in der Größe layout_wight = 1 für jede Schaltfläche gleich.

    4-machen Sie die Schaltflächen Hintergrund transparent.

    3-add spertator zwischen den Tasten in horizinoal linearlayout Layout über Ansicht oder Anyview und geben Sie die Breite als 0.5dp oder was immer dick Sie wollen.

    4 – Sie können Klicks hinzufügen oder die Schaltfläche zu jeder Ansicht ändern, die nicht mit dem Klicken übereinstimmt, so dass die darunter liegende Registerkarte die Klickaktion ausführt :).

    es könnte hässliche lösungen sein, aber es funktioniert perfekt und macht den job

    ein weiterer Hinweis, wenn Sie den Hintergrund des ausgewählten Tabs ändern möchten, können Sie den Indikator im Tablayout-Stil so einstellen, dass er der tatsächlichen Höhe des Tablayouts entspricht.

                      

    und das ist für Stil

       

    Ich denke nicht, dass es möglich ist, es sei denn, während der Tab-Erstellung geben Sie ein customView an und fügen zum Beispiel Ihren Teiler hinzu. ein TextView und Sie explizit TextView.setCompoundDrawablesWithIntrinsicBounds(0, 0,(int)id_of_a_divider, 0);

    wie du versuchst zu erkennen, ob es das erste Tab ,

     if(firstTab){ tabLayout.getTabAt(0).getCustomView() .setCompoundDrawablesWithIntrinsicBounds(0, 0,(int)id_of_a_divider, 0); //some little casting }else if(lastTab){ //dont get any tabLayout.getTabAt(index).getCustomView() .setCompoundDrawablesWithIntrinsicBounds(0,0,0, 0); else{ //the rest takes two sides, tabLayout.getTabAt(index).getCustomView() .setCompoundDrawablesWithIntrinsicBounds((int)id_of_a_divider , 0,(int)id_of_a_divider, 0); 

    Ich hoffe, du bekommst meine Idee

    Nicht Beste, aber alternative Art und Weise, die ich für aktuelle verwendet habe.

    In der Main.Xml

      

    Ich benutze Fragment und mache in onCreate() wie

     if (savedInstanceState == null) { replaceFragment(fragmentOne); } 

    Tab einstellen

    private void setupTabLayout () {

      fragmentOne = new FragmentOne(); fragmentTwo = new FragmentTwo(); allTabs.addTab(allTabs.newTab().setText("CURRENT YEAR"), true); allTabs.addTab(allTabs.newTab().setText("2015")); allTabs.addTab(allTabs.newTab().setText("2014")); allTabs.addTab(allTabs.newTab().setText("2013")); allTabs.addTab(allTabs.newTab().setText("2012")); allTabs.addTab(allTabs.newTab().setText("2011")); //Hide Indicator allTabs.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.transparent)); //Set Custom tab Background for (int i = 1; i < allTabs.getTabCount(); i++) { TabLayout.Tab tab = allTabs.getTabAt(i); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.tab_layout, allTabs, false); tvTabText = (TextView) relativeLayout.findViewById(R.id.tab_title); View view = (View) relativeLayout.findViewById(R.id.deviderView); tvTabText.setText(tab.getText()); tab.setCustomView(relativeLayout); if (i == 0) { view.setVisibility(View.GONE); tab.select(); } } } 

    tab_layout.xml

      < ?xml version="1.0" encoding="utf-8"?>       

    tab_item_selector.xml

     < ?xml version="1.0" encoding="utf-8"?>       

    Bitte beachten Sie als optionale Antwort immer.

    versuchen Sie das, hoffe es funktioniert gut für Sie.

    tab_activity.xml

              

    home_tab.xml

     < ?xml version="1.0" encoding="utf-8"?>    

    versuchen Sie, diesen Code zu verwenden, um divder in TabHost mTabHost.getTabWidget().setDividerDrawable(R.Color.blue);

    Eine Möglichkeit, einen benutzerdefinierten Teiler hinzuzufügen, besteht darin, ihn programmgesteuert festzulegen:

     tablayout.getTabWidget().setDividerDrawable(R.drawable.yourdivider image name); 

    Stellen Sie jedoch sicher, dass Sie dies aufrufen, bevor Sie den Inhalt der Registerkarten festlegen. Es würde mich treffen, wenn ich es anrufe.

    Sie können diese Zeile auch verwenden, wenn dies nicht funktioniert

     if(Build.VERSION.SDK_INT >= 11) tablayout.getTabWidget().setShowDividers(TabWidget.SHOW_DIVIDER_MIDDLE);