Soru Page Swipe View ile Android Sekmeli stili nasıl oluşturulur?


Bunun gibi bir sekme örneği istiyorum

google play tab

Aradım ama sadece bunu aldım.

viewpageindicator

Bu kaynağı kullanamadım. Birisi bana kayan seçeneğiyle başka bir sekme örneği söyleyebilir mi?
Bence, viewpageindicator, google play sekmeleriyle aynı değil.

google oyun sayfasında kaydırma yaparken, kaydırma sırasında sekmelerin altındaki satırın hareket etmesine neden oluyoruz, ancak viewpageindicator'da değil.

teşekkür ederim


25
2018-03-08 06:07


Menşei


Şuna bak: androidbeasts.wordpress.com/2015/08/11/tabs-with-swipe-views/... - Aakash
@Person Alex Jolig'in cevabını neden en iyi cevap olarak işaretlemiyorsunuz? - TeodorKolev
Bunu kontrol et gadgetsaint.com/android/create-viewpager-tabs-android/... - ASP
Bunu kontrol et ps06756.wordpress.com/2016/12/04/... - Pratik Singhal


Cevaplar:


Bu makale (Sekmeler ile çalışan Android Materyal Tasarımı) yayınlandı 13 Eylül 2015 sekme sayfaları oluştururken size yol gösterir.

Örneğin, oluşturma Sabit Sekmeler

Sabit sekmeler, sınırlı sayıda sekmeniz olduğunda kullanılmalıdır. Bunlar   tırnaklar yerine sabitlenir. Android tasarım desteği kütüphanesinde   yeni öğeler gibi CoordinatorLayout, AppBarLayout, TabLayout ve çok   Daha fazlası tanıtıldı. Bunların hepsini kapsamaz.   Bu makalenin gündemi.

Ana etkinliğin düzen dosyasını açın (activity_main.xml) ve Ekle   düzen kodunun altında.

app:tabMode - Sekme düzeninin modunu tanımlar. Bizim durumumuzda   değer “sabit” olmalıdır

activity_main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</android.support.design.widget.CoordinatorLayout>

Açık MainActivity.java ve aşağıdaki değişiklikleri yapın.

tabLayout.setupWithViewPager() - ViewPager'ı TabLayout'a atar.

setupViewPager() - Uygun şekilde ayarlayarak sekme sayısını tanımlar   parça ve sekme adı.

ViewPagerAdapter - Özel adaptör sınıfı gerekli parçaları sağlar   Görüntü çağrı cihazı için.    MainActivity.java

package info.androidhive.materialtabs.activity;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

import java.util.ArrayList;
import java.util.List;

import info.androidhive.materialtabs.R;
import info.androidhive.materialtabs.fragments.OneFragment;
import info.androidhive.materialtabs.fragments.ThreeFragment;
import info.androidhive.materialtabs.fragments.TwoFragment;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

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

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "ONE");
        adapter.addFragment(new TwoFragment(), "TWO");
        adapter.addFragment(new ThreeFragment(), "THREE");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

Şimdi uygulamayı çalıştırın. Kaydırma ile görüntülenen sekmeleri görebilmeniz gerekir   sekmeler arasında işlevsellik.


24
2018-01-21 08:31



Bunu uygulamak istediğimde, her seferinde bu cevabı kullanıyorum. Dürüst olmak gerekirse sana verdiğim ödül - Ab_
+1. Bağdaştırıcınızdaki koleksiyonlarda değişiklik yapmak istediğinizde, notifyDataSetChanged () öğesini çağırmayı unutmayın. addFragment () içinde - MJ33


Öncelikle viewpager ile bir xml düzen dosyası oluşturmanız gerekir android.support.v4.view.ViewPager

Ardından bu yerleşimi ana etkinliğinizde şişirin, etkinliğinizin uygulandığından emin olun.

android.support.v7.app.ActionBar.TabListener Diyelim ki, 4 sekmeye sahip olmak, sonra yaratmak

4 farklı parça. Bu parçaları temel almak için ortak bir adaptör oluşturun.

Seçtiğiniz sekmeler.

İşte kod snippet'inin basit örneği. http://www.feelzdroid.com/2014/10/android-action-bar-tabs-swipe-views.html

Not: Yukarıdaki örnek, geri hareket çubuğu sağlayan android destek lib'iyle iyi çalışır

Android telefonların önceki sürümü için uyumluluk

Umarım yardımcı olur.

Teşekkürler


3
2017-11-27 04:23





Benzer bir şeyi uygulamaya koyduğumda, daha güzel bir şekilde, sınıflar anlamında yapmıştım. Bağdaştırıcıyı çalışma adı verilen bir pakette oluşturmuştum.

Kod aşağıdadır:

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
          return new WorkingFragment();
        //You can add as many fragments as you wish here by adding the cases and calling the different fragments.
        }      
        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs. 4 is only the number of fragments I had used.
        return 4;
    }
}

Ardından yeni bir sınıf oluşturmalısınız. WorkingFragment verdiğim örnekte. Temiz kodlama için bu paketi ana pakette oluşturdum.

Parçanın kodu aşağıdadır:

public class NewEventFragment extends Fragment {

    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //reference the xml file containing the view with all the code here.
    }
}

İçinde MainActivityDaha sonra, bir sekme diğerine geçmek için işlevselliği yapmanız gerekir. Benim durumumda bunu ana pakete dahil etmiştim.

Aşağıda, MainActivity sınıfının kodu verilmiştir:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager ViewPager;
    private TabsPagerAdapter SectionsPagerAdapter;
    private ActionBar actionBar;

    //Include the name for the tabs in this array. Make sure the number of elements in this string matches the number of views you will have in your app. 
    private String[] tabs = {};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     // Initialisation
        ViewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        SectionsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        ViewPager.setAdapter(SectionsPagerAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
        }

        ViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {

    }

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        ViewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
    }
} 

Umarım bu, uygulamanızın gerekli işlevlerini yerine getirmenize yardımcı olmuştur :)


1
2017-08-18 07:48



Güzel cevap, ama en yüksek oylanan, daha açıktı. - Ab_


parça sekmeleriyle çalışmanın kolay yolu

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

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

üzerinde oluştur ve sonra

private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new 
        ViewPagerAdapter(getSupportFragmentManager());        
        adapter.addFrag(new RootDetailFragment(), "TAB 1");
        adapter.addFrag(new ShiftDetailFragment(), "TAB 2");        
        viewPager.setAdapter(adapter);
}


class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

düzen dosyasında ekle

 <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#000"
        app:tabGravity="fill"
        app:tabMode="fixed" />
</android.support.design.widget.AppBarLayout>

0
2017-10-06 09:35