Verwenden Sie die Registerkarte mit neuer ToolBar (AppCompat v7-21)

Ich habe SupportActionBar mit Tabs und einem benutzerdefinierten ActionBar-Theme (erstellt mit http://jgilfelt.github.io/android-actionbarstyegenerator/ ) verwendet, das die Registerkarten nur anzeigt, wenn der Benutzer die Suchansicht erweitert.

public boolean onMenuItemActionExpand(MenuItem item) { actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); return true; } } 

Ich habe von ActionBar zu Toolbar migriert. Meine App muss API 9 wirklich unterstützen.

Gibt es eine Möglichkeit, diesen Code zum Hinzufügen der Registerkarten zu verwenden ?:

 Toolbar toolbar = (Toolbar) findViewById(R.id.new_actionbar); setSupportActionBar(toolbar); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

Wenn möglich, wie kann ich mein benutzerdefiniertes Design verwenden oder die Symbolleiste formatieren?

Die Dokumentation besagt, dass dies veraltet ist und schlägt vor, eine andere Art der Navigation zu verwenden. Aber ich kenne keine anderen Komponenten in Android, die die gleiche functionalität haben.

Etwas Hilfe?

    Mit der API 21 ist die Methode setNavigationMode(ActionBar.NAVIGATION_MODE_TABS) veraltet .

    Sie können ein anderes Muster verwenden. Zum Beispiel können Sie das gleiche Beispiel verwenden, das Sie in googleio14 sehen können.

    Es verwendet ein SlidingTabLayout das mit einem ViewPager .

    Hier finden Sie das Beispiel (es ist in Ihrem SDK-Beispiel)

    Hier finden Sie das Google io14-Beispiel:

    • Layout

    • Java

    UPDATE 29/05/2015

    Mit der neuen Design Support Library können Sie jetzt das neue TabLayout verwenden .

    build.gradle Sie diese Abhängigkeit build.gradle zu Ihrer build.gradle

     compile 'com.android.support:design:22.2.0' 

    Der Code ist sehr einfach:

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); 

    Um viele der Features von Materialentwürfen zu implementieren, sollten Sie diese in einem CoordinatorLayout und einem AppBarLayout verwenden .

    Etwas wie das:

             

    Obwohl ich wahrscheinlich ein wenig zu spät gekommen bin, um diese Frage jetzt zu beantworten, wurde mir klar, dass ich eine Antwort auf eine ähnliche Frage geschrieben habe, die sowohl die Verwendung der Design Support Library als auch vor Google I / O betrifft.

    Ich habe die wesentlichen Teile unten aufgeführt:


    Die Verwendung eines TabLayout mit der Toolbar ist seit der Ankündigung der Android Design Support Library viel einfacher geworden, so dass wir keine benutzerdefinierten Ansichtsklassen mehr herunterladen müssen.

    Aus dem Blogspot-Beitrag der Android-Entwickler in der Android Design-Support-Bibliothek :

    Registerkarten :

    Das Wechseln zwischen verschiedenen Ansichten in Ihrer App über Registerkarten ist kein neues Konzept für das Materialdesign und sie sind gleichermaßen als Navigationsmuster auf oberster Ebene oder zum Organisieren verschiedener Gruppierungen von Inhalten innerhalb Ihrer App (z. B. verschiedene Musikgattungen) geeignet.

    Das TabLayout der Design-Bibliothek implementiert sowohl feste Registerkarten, bei denen die Ansichtsbreite gleichmäßig auf alle Registerkarten verteilt ist, als auch rollbare Registerkarten, bei denen die Registerkarten keine einheitliche Größe haben und horizontal verschoben werden können. Registerkarten können programmgesteuert hinzugefügt werden:

    TabLayout tabLayout = ...;
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));

    Wenn Sie jedoch einen ViewPager für horizontales Paging zwischen Registerkarten verwenden, können Sie Registerkarten direkt aus dem getPageTitle () Ihres PagerAdapters erstellen und dann beide mit setupWithViewPager() . Dies stellt sicher, dass Tab-Selection-Ereignisse den ViewPager aktualisieren und Seitenänderungen die ausgewählte Registerkarte aktualisieren.


    Wenn Sie nicht die Design Support-Bibliothek verwenden, müssen Sie stattdessen Folgendes tun:

    1. Laden Sie die Dateien SlidingTabLayout.java und SlidingTabStrip.java von der E / A-Konferenz-App von Google auf GitHub herunter. Dies wären die Ansichten, die im Tab-Layout verwendet werden würden. Daher habe ich einen Ordner mit meinen anderen Java-Aktivitäten namens ‘view’ erstellt und dort abgelegt.

    2. Bearbeiten Sie Ihr Layout, um das SlidingTabLayout :

             ...  

    Die Zeile, die auf die verweist ( ) verweist auf eine andere XML-Datei, die ich für die verwendet habe.

    3. Ändern Sie die Paketnamen in SlidingTabLayout.java und SlidingTabStrip.java entsprechend dem Ort, an dem sie platziert wurden. In meinem Fall habe ich etwas ähnliches verwendet: package com.mycompany.myapp.view; für beide Dateien. Organisieren Sie Importe und ergänzen Sie sie, wie von der von Ihnen verwendeten IDE angegeben.

    4. AppCompatActivity in Ihrer Activity (die AppCompatActivity erweitert AppCompatActivity ) die onCreate in der onCreate Methode:

     Toolbar toolbar = (Toolbar) findViewById(R.id.detail_toolbar); setSupportActionBar(toolbar); 

    5. ViewPager SlidingTabLayout die ViewPager und SlidingTabLayout Teile ein:

     mViewPager = (ViewPager) findViewById(R.id.view_pager); mViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs); mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.tab_line)); mSlidingTabLayout.setDistributeEvenly(true); mSlidingTabLayout.setViewPager(mViewPager); 

    Die Farbe ‘ tab_line ‘ war eine Farbe, die ich in color.xml deklariert hatte color.xml die die Farbe des Tab-Linien-Indikators hätte. Beachten Sie auch, dass die obigen Variablen global waren, die ich zuvor in dieser Aktivität definiert habe:

     SlidingTabLayout mSlidingTabLayout; ViewPager mViewPager; 

    6. ViewPagerAdapter schließlich den ViewPagerAdapter den ich zuvor aufgerufen hatte. Dies wäre für das Ändern der Seite abhängig davon verantwortlich, welche Registerkarte ausgewählt wurde. Ich habe den folgenden Code verwendet:

     public class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { // Returns the number of tabs return 3; } @Override public Fragment getItem(int position) { // Returns a new instance of the fragment switch (position) { case 0: return new FragmentOne(); case 1: return new FragmentTwo(); case 2: return new FragmentThree(); } return null; } @Override public CharSequence getPageTitle(int position) { Locale l = Locale.getDefault(); switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(l); case 1: return getString(R.string.title_section2).toUpperCase(l); case 2: return getString(R.string.title_section3).toUpperCase(l); } return null; } } 

    Wie ich oben erwähnt habe, sind weitere Details zu diesen Lösungen auf einer anderen Frage, die ich beantwortet habe, über die Verwendung von Schiebereglern mit der Symbolleiste verfügbar.