webentwicklung-frage-antwort-db.com.de

Hinzufügen von Schiebereglern mithilfe der Support Library v7: 21 mit der Symbolleiste in den Android Developer Tools für vorhandenes Projekt

Ich habe die Informationen in diesem Link bereits gelesen: Verwenden Sie die Tab mit der neuen Toolbar (AppCompat v7-21) und habe viel darüber nachgedacht.

Das Problem ist jedoch, dass das SlidingTabLayout-Projekt Gradle-Build-Dateien und deren Struktur verwendet. Ich möchte das Tabulator-Layout mit Eclipse hinzufügen. Wie mache ich das?

Ich habe das SlidingTabLayout-Projekt jedoch in Android Studio ausgeführt. Aber wie füge ich der Toolbar in Version 7: 21 Registerkarten hinzu?

Hinweis: All dies muss in einem vorhandenen Projekt ausgeführt werden, das alles eingerichtet hat und mich vor den veralteten APIs wie ActionBar.setNavigationMode usw. in API 21 warnt

10
Amit Trivedi

1 Kopieren Sie SlidingTabLayout.Java aus https://developer.Android.com/samples/SlidingTabsColors/src/com.example.Android.common/view/SlidingTabLayout.html und fügen Sie es in Ihr Paket ein.

Hauptaktivität.Java

package com.example.mysliding;

import com.example.Android.common.view.SlidingTabLayout;
import com.example.mysliding.SlidingTabsBasicFragment.SamplePagerAdapter;

import Android.support.v4.app.FragmentTransaction;
import Android.support.v4.view.PagerAdapter;
import Android.support.v4.view.ViewPager;
import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.widget.Toolbar;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.TextView;

public class MainActivity extends ActionBarActivity {

static final String LOG_TAG = "SlidingTabsBasicFragment";
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_sample);
    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);

    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setAdapter(new SamplePagerAdapter());
    mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
    mSlidingTabLayout.setViewPager(mViewPager);

    /*
     * FragmentTransaction transaction =
     * getSupportFragmentManager().beginTransaction();
     * SlidingTabsBasicFragment fragment = new SlidingTabsBasicFragment();
     * transaction.replace(R.id.sample_content_fragment, fragment);
     * transaction.commit();
     */

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

class SamplePagerAdapter extends PagerAdapter {

    /**
     * @return the number of pages to display
     */
    @Override
    public int getCount() {
        return 5;
    }

    /**
     * @return true if the value returned from
     *         {@link #instantiateItem(ViewGroup, int)} is the same object
     *         as the {@link View} added to the {@link ViewPager}.
     */
    @Override
    public boolean isViewFromObject(View view, Object o) {
        return o == view;
    }

    // BEGIN_INCLUDE (pageradapter_getpagetitle)
    /**
     * Return the title of the item at {@code position}. This is important
     * as what this method returns is what is displayed in the
     * {@link SlidingTabLayout}.
     * <p>
     * Here we construct one using the position value, but for real
     * application the title should refer to the item's contents.
     */
    @Override
    public CharSequence getPageTitle(int position) {
        return "Item " + (position + 1);
    }

    // END_INCLUDE (pageradapter_getpagetitle)

    /**
     * Instantiate the {@link View} which should be displayed at
     * {@code position}. Here we inflate a layout from the apps resources
     * and then change the text view to signify the position.
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // Inflate a new layout from our resources

        View view = getLayoutInflater().inflate(R.layout.pager_item,
                container, false);
        // Add the newly created View to the ViewPager
        container.addView(view);

        // Retrieve a TextView from the inflated View, and update it's text
        TextView title = (TextView) view.findViewById(R.id.item_title);
        title.setText(String.valueOf(position + 1));

        Log.i(LOG_TAG, "instantiateItem() [position: " + position + "]");

        // Return the View
        return view;
    }

    /**
     * Destroy the item from the {@link ViewPager}. In our case this is
     * simply removing the {@link View}.
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
        Log.i(LOG_TAG, "destroyItem() [position: " + position + "]");
    }

}

}

fragment_sample.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <Android.support.v7.widget.Toolbar
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/my_awesome_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" 
        Android:minHeight="?attr/actionBarSize"

        app:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" >

            <com.example.Android.common.view.SlidingTabLayout
                Android:id="@+id/sliding_tabs"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content" />
        </LinearLayout>
    </Android.support.v7.widget.Toolbar>

    <Android.support.v4.view.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="0px"
        Android:layout_weight="1"
        Android:background="@Android:color/white" />

</LinearLayout>

Pager_item.xml

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

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"
      Android:orientation="vertical"
      Android:gravity="center">

    <TextView
          Android:id="@+id/item_subtitle"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"
          Android:textAppearance="?android:attr/textAppearanceLarge"
          Android:text="Page:"/>

    <TextView
          Android:id="@+id/item_title"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"
          Android:textSize="80sp" />

</LinearLayout>
15
kunal.c

Ich hatte auch das gleiche Problem. Da Android die Verwendung von ActionBar und Tabs immer wieder ändert, ist es wirklich schwer zu wissen, welche Implementierung am besten geeignet ist.

Ich folgte dem Beispiel , das hier gezeigt wird , fügte jedoch einige zusätzliche Funktionen hinzu. Sie können meine Version und ihre Verwendung auf dieser Gist sehen.

Was ich hinzugefügt habe, sind;

  • Aktivieren von Tabs mit gleicher Breite (wenn zwei Tabs vorhanden sind, haben sie die Aktionsleiste mit halber Breite)
  • Anzeigen von Bildern anstelle von Text oder Anzeigen von Text und Bildern auf Registerkarten

AKTUALISIEREN

Es gibt ein neues Layout namens Tab Layout in der Support-Bibliothek. Sie können es stattdessen verwenden.

Sie können auch eine andere Antwort sehen, here erzählt mehr darüber.

3
eluleci

Ich habe gerade diese Bibliothek gefunden, die ziemlich genau das ist, was hier bereits erwähnt wurde, aber mit weniger manuellen Anhebungen. Schauen Sie unter https://github.com/neokree/MaterialTabs nach.

Um mich selbst schamlos anzuschließen, ist dies ein Beispiel davon in Aktion https://play.google.com/store/apps/details?id=com.snilius.fhstats .

Das einzige, was zum Zeitpunkt des Schreibens fehlt, ist, dass der Tabulator beim Paging des Viewpagers zwischen den Tabs verschoben wird, wie dies bei Google Play der Fall ist.

0

Fügen Sie einfach ViewPager und SlidingTabLayout zu Ihrer XML hinzu:

    <com.example.SlidingTabLayout
            Android:id="@+id/sliding_tabs"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            />

    <Android.support.v4.view.ViewPager
            Android:id="@+id/pager"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />

Erstellen Sie in Ihrem Code einen Adapter für Ihren ViewPager (als Beispiel FragmentPagerAdapter) und binden Sie ihn an Ihren ViewPager. Binden Sie dann das SlidingTabLayout an Ihren ViewPager:

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);

final SlidingTabLayout tabLayout = (SlidingTabLayout)findViewById(R.id.sliding_tabs);
tabLayout.setViewPager(mViewPager);
0
MDXDave