Mode navigasi panel aksi sudah tidak digunakan lagi di Android L

203

Mengambil melihat laporan diff API untuk Android "L" preview, saya melihat bahwa semua metode yang terkait dengan mode navigasi di ActionBarkelas (seperti setNavigationMode(), addTab(), selectTab(), & c). sekarang sudah ditinggalkan.

Dokumentasi menjelaskan:

Mode navigasi bilah tindakan sudah usang dan tidak didukung oleh bilah tindakan bilah alat inline. Pertimbangkan untuk menggunakan pola navigasi umum lainnya sebagai gantinya.

Apa pengganti yang seharusnya?

Juga, apakah "bilah tindakan bilah alat inline" konsep baru? Kurasa aku belum pernah mendengarnya sebelumnya.

matiash
sumber
Di mana Anda menemukan dokumen untuk Pratinjau L?
Kuno
8
@KlassenK Ini belum terintegrasi ke dalam dokumentasi utama, tetapi Anda dapat mengunduhnya dari developer.android.com/preview/reference.html
matiash
Terima kasih atas tautan ke dokumen!
Robert Karl
Untuk setNavigationList apa yang Anda gunakan
Lion789
1
@ShirishHerwade Ya, karena digabungkan ke dalam dokumentasi utama ketika Android 5.0 dirilis. Dalam hal apa pun, sekarang Anda dapat menemukan pemberitahuan penghentian di developer.android.com/reference/android/app/…
matiash

Jawaban:

179

Perpustakaan Dukungan Desain Android baru menambahkan TabLayout , menyediakan implementasi tab yang cocok dengan pedoman desain materi untuk tab . Panduan lengkap tentang cara menerapkan Tab dan ViewPagerdapat ditemukan di video ini

Sekarang usang: The PagerTabStrip merupakan bagian dari perpustakaan dukungan (dan telah selama beberapa waktu) dan berfungsi sebagai pengganti langsung. Jika Anda lebih suka tab gaya Google Play yang lebih baru, Anda dapat menggunakan pustaka PagerSlidingTabStrip atau memodifikasi salah satu contoh yang disediakan oleh Google SlidingTabsBasic atau SlidingTabsColors seperti yang dijelaskan dalam video Dev Bytes ini .

ianhanniballake
sumber
8
Ini adalah pengganti langsung dalam mode potret, dengan bonus membuatnya mudah untuk menggunakan header Jenis-bahan yang diperluas. Namun, dalam mode lansekap tab ActionBar secara otomatis naik ke bilah tindakan itu sendiri, membebaskan area layar yang penting. Adakah yang tahu cara bersih untuk mengelola ini dengan perpustakaan dukungan?
ehartwell
9
Dokumen pengembang masih mengatakan menggunakan Tab Action Bar. Simlpy belum diperbarui? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai
3
Ini adalah pengganti untuk NAVIGATION_MODE_TABS tetapi tidak untuk NAVIGATION_MODE_LIST: /
Geob-o-matic
2
@ Geobert - NAVIGATION_MODE_LISTjauh lebih mudah, mengingat semua yang dilakukan adalah menambahkan Spinner dan beberapa pembantu callback.
ianhanniballake
2
Untuk apa penggantian itu NAVIGATION_MODE_LIST? Milik saya daftar itu sudah usang ...
Sauron
20

Sekarang karena Android 5.0 docs tersedia, kami memiliki dokumentasi resmi untuk widget Toolbar :

Toolbar standar untuk digunakan dalam konten aplikasi.

Bilah Alat adalah generalisasi bilah tindakan untuk digunakan dalam tata letak aplikasi. Sementara bilah tindakan secara tradisional merupakan bagian dari dekorasi jendela buram Kegiatan yang dikendalikan oleh kerangka kerja, Bilah Alat dapat ditempatkan pada tingkat bersarang apa pun yang bersarang dalam hierarki tampilan .

Sebuah Toolbarwidget juga dapat digunakan untuk menggantikan bar tindakan:

Aplikasi dapat memilih untuk menunjuk Bilah Alat sebagai bilah tindakan untuk Aktivitas menggunakan setActionBar()metode.

Penghentian tab di bilah tindakan kemungkinan besar disebabkan oleh hal ini, karena bilah alat tidak dapat memuat tab itu sendiri.

Juga, tersedia untuk versi Android sebelumnya melalui pustaka appcompat. Lihat posting ini oleh Chris Banes untuk informasi lebih lanjut. Kutipan:

Android 5.0 memperkenalkan widget Toolbar baru. Ini adalah generalisasi dari pola ActionBar tetapi memberi Anda lebih banyak kontrol dan fleksibilitas dalam menggunakannya. Bilah Alat adalah tampilan dalam hierarki Anda seperti yang lainnya, sehingga memudahkan untuk berinteraksi dengan sisa tampilan Anda, menghidupkan, bereaksi terhadap peristiwa gulir.

matiash
sumber
53
"kontrol dan fleksibilitas yang lebih" hanya bagus jika ada default yang masuk akal dan mudah digunakan. Jika ada sesuatu yang fleksibel tetapi Anda perlu 20 baris di sana-sini untuk membuatnya berfungsi, saya tidak menganggapnya sebagai kemenangan ...
TWiStErRob
1
@TWiStErRob saya setuju. Tekankan miliknya, bukan milikku :)
matiash
6
@TWiStErRob Saya merasakan hal yang sama ... Google lebih baik hati-hati, kegiatan semacam ini mengingatkan saya pada Microsoft lama
Sauron
13

Sepertinya mereka menambahkan Kelas baru yang bernama android.widget.Toolbarmemanjang ViewGroup. Mereka juga menambahkan metode baru setActionBar(Toolbar)di Activity. Saya belum mengujinya, tetapi sepertinya Anda dapat membungkus semua jenis TabWidgets, Spinnersatau tampilan khusus menjadi Toolbardan menggunakannya sebagai Actionbar Anda.

Kuno
sumber
1
Dapatkah seseorang berbagi jika mereka mencoba sesuatu dengan widget Toolbar atau tahu bagaimana ini dimaksudkan untuk berfungsi. Juga termasuk dalam paket kompatibilitas?
Sandra
1
Terima kasih banyak untuk tautannya..jadi sekarang jika saya ingin mengembangkan aplikasi yang sesuai dengan pedoman materi baru, saya mungkin harus menunggu bilah alat tersedia, karena jika saya menggunakan actionbar saya akan menggunakan semuanya itu sudah usang ..?
Sandra
1
ActionBar masih akan menjadi pola desain standar. Hanya mode navigasi yang akan ditinggalkan (Tab atau Spinner). Lihat developer.android.com/guide/topics/ui/actionbar.html#Tab dan developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno
1
Saya pikir itu terkait dengan pertanyaan .. apk aplikasi i / o 2014 baru tersedia untuk diunduh, dan seperti yang Anda lihat dari plus.google.com/+RomanNurik/posts/PD6MS3feXTT , ada banyak gaya bilah alat yang digunakan . Kami hanya harus menunggu kode sumber, dan menjelajahinya kemudian :(
Sandra
4

Yang baru Toolbartidak dapat digunakan untuk menggembungkan banyak objek garis, jadi tidak mungkin untuk menambahkan Tab ke dalamnya.
Jika Anda ingin menggunakan Toolbarsejenis, TabWidgetAnda dapat menyisipkan beberapa Objek Tab untuk itu, tetapi hanya dengan gaya Holo lama.

Di sini ada Perpustakaan kustom yang menggunakan v7 Toolbarseperti TabWidgetdengan animasi Desain Bahan baru, tetapi menggunakan metode yang sama dari yang lama ActionBar Tabs, sehingga Anda dapat melampirkan Anda ViewPageruntuk itu.

NeoKree
sumber
3

Untuk 'penggantian' ActionBar yang sudah usang, saya mengubah jenis variabel tipe ActionBar saya menjadi PagerTabStrip, sesuai (kode lama dalam komentar):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Sebuah 'pengganti' untuk .selectTab (tabindex) ~ actionBar adalah menggunakan metode .setCurrentItem (int) ViewPager yang terkait, seperti ini (kode lama dalam komentar):

/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);

Semoga ini bisa membantu.

tepuk tangan
sumber
1

Saya memiliki masalah yang sama dan solusi ini cocok untuk saya:

Di file layout xml yang berisi viewpager, tambahkan PagerTabStrip seperti yang ditunjukkan:

<android.support.v4.view.PagerTabStrip
    android:id="@+id/pager_tab_strip"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:background="#996633"
    android:textColor="#CCCCCC"
    android:paddingTop="5dp"
    android:paddingBottom="5dp" />

Untuk mengontrol judul halaman, tambahkan pernyataan beralih ke file ViewPager Anda:

@Override
public CharSequence getPageTitle(int position)
{
    switch (position)
    {
    case 0:
        return "Page 1";

    case 1:
        return "Page 2";

    case 2:
        return "Page 3";

    }

    return null;
}
AR Ross
sumber
0

FragmentTabHost juga merupakan opsi.

Kode ini dari situs pengembang Android:

/**
 * This demonstrates how you can implement switching between the tabs of a
 * TabHost through fragments, using FragmentTabHost.
 */
public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_tabs);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
            FragmentStackSupport.CountingFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
            LoaderCursorSupport.CursorLoaderListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
            LoaderCustomSupport.AppListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
            LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
    }
}
Anuj
sumber
1
Berikut ini adalah tutorial yang menyertakan jawaban ini, sehingga dapat membantu seseorang skholingua.com/android-basic/user-interface/compositeitems/…
Dejan
0

Saya menemukan tutorial ini bermanfaat saat menyusun action bar (sekarang 'tool bar' - argh) yang mendukung tab geser dengan Desain Material:

https://www.youtube.com/watch?v=Fl0xMuo10yA

http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html

Anda harus mensintesis sumber daya ini agar sesuai dengan situasi khusus Anda. Misalnya, Anda mungkin tidak ingin membuat tab secara manual dengan gaya yang sama dengan tutorial exoguru.com.

kip2
sumber
Tautan kedua sudah mati.
jcaruso
@ jcaruso itu bukan salah saya karena domain itu tampaknya sudah kadaluwarsa. Video youtube masih relevan
kip2
1
@ kip2 Saya setuju, ini bukan salahmu. Namun, saya sarankan seperti yang disarankan semua orang, hindari menggunakan tautan untuk menjelaskan jawaban karena masalah ini.
jcaruso
0

Baik bagi saya untuk menangani bilah alat navigasi yang tidak digunakan lagi dengan menggunakan bilah alat v7 widget appcompat.

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });
Pengembang pemula
sumber
0

Saya pikir pengganti yang cocok untuk ketika Anda memiliki tiga hingga lima layar yang sama pentingnya adalah BottomNavigationActivity, ini dapat digunakan untuk beralih fragmen.

Anda akan melihat ada penyihir untuk ini di Android Studio, hati-hati karena Android Studio memiliki kecenderungan untuk menghasilkan kode pelat ketel yang terlalu rumit.

Sebuah tutorial dapat ditemukan di sini: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Tutorial kualitas lainnya dapat ditemukan di Android Hive di sini: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

Andrew S
sumber