Các chế độ điều hướng trên thanh hành động không được dùng trong Android L


203

Nhìn vào báo cáo diff API cho Android "L" xem trước, tôi thấy rằng tất cả các phương pháp liên quan đến chế độ chuyển hướng trong ActionBarlớp (ví dụ như setNavigationMode(), addTab(), selectTab(), & c). hiện đang bị phản đối

Các tài liệu giải thích:

Các chế độ điều hướng trên thanh hành động không được hỗ trợ và không được hỗ trợ bởi các thanh hành động trên thanh công cụ nội tuyến. Thay vào đó hãy xem xét sử dụng các mẫu điều hướng phổ biến khác.

Sự thay thế được cho là gì?

Ngoài ra, "thanh hành động thanh công cụ nội tuyến" là một khái niệm mới? Tôi không nghĩ rằng tôi đã nghe nói về nó trước đây.


Nơi mà bạn đã tìm thấy các tài liệu cho L Preview?
Kuno

8
@KlassenK Chưa được tích hợp vào tài liệu chính, nhưng bạn có thể tải xuống từ developer.android.com/preview/reference.html
matiash

Cảm ơn các liên kết đến các tài liệu!
Robert Karl

Đối với setNavulationList bạn đã sử dụng những gì
Lion789

1
@ShirishHerwade Có, vì nó đã được hợp nhất vào tài liệu chính khi Android 5.0 được phát hành. Trong mọi trường hợp, bây giờ bạn có thể tìm thấy thông báo phản đối trong developer.android.com/reference/android/app/iêu
matiash

Câu trả lời:


179

Thư viện hỗ trợ thiết kế Android mới bổ sung TabLayout , cung cấp cách triển khai tab phù hợp với nguyên tắc thiết kế vật liệu cho các tab . Hướng dẫn đầy đủ về cách triển khai Tab và ViewPagercó thể được tìm thấy trong video này

Bây giờ bị phản đối: Các PagerTabStrip là một phần của thư viện hỗ trợ (và đã được một thời gian) và đóng vai trò như một sự thay thế trực tiếp. Nếu bạn thích các tab kiểu Google Play mới hơn, bạn có thể sử dụng thư viện PagerSlidingTabStrip hoặc sửa đổi một trong các ví dụ do Google cung cấp SlidingTabsBasic hoặc SlidingTabsColors như được giải thích trong video Dev Bytes này .


8
Đây là sự thay thế trực tiếp trong chế độ dọc, với phần thưởng là giúp dễ dàng sử dụng tiêu đề Kiểu vật liệu mở rộng. Tuy nhiên, ở chế độ ngang, các tab ActionBar sẽ tự động di chuyển lên thanh hành động, giải phóng vùng màn hình quan trọng. Bất cứ ai cũng biết một cách sạch sẽ để quản lý điều này với thư viện hỗ trợ?
ehartwell

9
Tài liệu dành cho nhà phát triển vẫn cho biết sử dụng Action Bar Tab. Simlpy chưa cập nhật? developer.android.com/training/im
vâying-navulation / từ

3
Đây là sự thay thế cho NAVIGATION_MODE_TABS nhưng không phải cho NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTdễ dàng hơn nhiều, vì tất cả những gì đã làm là thêm một Spinner và một số trợ giúp gọi lại.
ianhanniballake

2
Sự thay thế cho là NAVIGATION_MODE_LISTgì? Của tôi liệt kê nó là không tán thành ...
Sauron

20

Giờ đây, tài liệu Android 5.0 đã có sẵn, chúng tôi có tài liệu chính thức cho tiện ích Thanh công cụ :

Một thanh công cụ tiêu chuẩn để sử dụng trong nội dung ứng dụng.

Thanh công cụ là một tổng quát của các thanh hành động để sử dụng trong bố trí ứng dụng. Mặc dù một thanh hành động theo truyền thống là một phần của trang trí cửa sổ mờ của Activity được điều khiển bởi khung, Thanh công cụ có thể được đặt ở bất kỳ mức lồng nhau tùy ý nào trong hệ thống phân cấp chế độ xem .

Một Toolbarwidget cũng có thể được sử dụng để thay thế thanh hành động:

Ứng dụng có thể chọn chỉ định Thanh công cụ làm thanh hành động cho Hoạt động bằng setActionBar()phương thức.

Sự phản đối của các tab trong thanh hành động rất có thể là do điều này, vì các thanh công cụ không thể tự chứa tab.

Ngoài ra, nó có sẵn cho các phiên bản Android trước thông qua thư viện appcompat. Xem bài đăng này của Chris Banes để biết thêm thông tin. Một đoạn trích:

Android 5.0 giới thiệu tiện ích Thanh công cụ mới. Đây là một sự tổng quát của mô hình ActionBar nhưng mang đến cho bạn nhiều quyền kiểm soát hơn và linh hoạt trong việc sử dụng nó. Thanh công cụ là một chế độ xem trong hệ thống phân cấp của bạn giống như mọi thứ khác, giúp dễ dàng xen kẽ với phần còn lại của chế độ xem, hoạt hình, phản ứng với các sự kiện cuộn.


53
"Kiểm soát và linh hoạt hơn nhiều" chỉ tốt nếu có mặc định hợp lý và dễ sử dụng. Nếu một cái gì đó linh hoạt nhưng bạn cần 20 dòng ở đây và ở đó để làm cho nó hoạt động, tôi không coi đó là một chiến thắng ...
TWiStErRob

1
@TWiStErRob Tôi đồng ý. Nhấn mạnh của anh ấy, không phải của tôi :)
matiash

6
@TWiStErRob Tôi cũng cảm thấy như vậy ... Google tốt hơn hãy coi chừng, loại hoạt động này đang nhắc nhở tôi về Microsoft cũ
Sauron

13

Có vẻ như họ đã thêm một Class mới có tên android.widget.Toolbarmở rộng ViewGroup. Ngoài ra họ đã thêm một phương pháp mới setActionBar(Toolbar)trong Activity. Tôi đã không kiểm tra nó, nhưng có vẻ như bạn có thể bọc tất cả các loại TabWidgets, Spinnershoặc quan điểm tùy chỉnh vào Toolbarvà sử dụng nó như Actionbar của bạn.


1
Ai đó có thể chia sẻ nếu họ đã thử bất cứ điều gì với tiện ích Thanh công cụ hoặc biết nó dự định hoạt động như thế nào. Ngoài ra nó có được bao gồm trong gói tương thích?
Sandra


1
Cảm ơn bạn rất nhiều về liên kết..như bây giờ nếu tôi muốn phát triển một ứng dụng theo hướng dẫn vật liệu mới, có lẽ tôi nên đợi thanh công cụ có sẵn, vì nếu tôi sử dụng thanh hành động, tôi sẽ sử dụng mọi thứ đó là phản đối ..?
Sandra

1
ActionBar vẫn sẽ là một mẫu thiết kế tiêu chuẩn. Chỉ các chế độ điều hướng sẽ không được chấp nhận (Tab hoặc Spinner). Xem developer.android.com/guide/topics/ui/actionbar.html#Tabsdeveloper.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
Tôi nghĩ rằng nó có liên quan đến câu hỏi .. apk của ứng dụng i / o 2014 mới có sẵn để tải xuống và như bạn có thể thấy từ plus.google.com/+RomanNurik/posts/PD6MS3feXTT , có rất nhiều kiểu thanh công cụ được sử dụng . Chúng ta chỉ cần đợi mã nguồn và khám phá nó sau đó :(
Sandra

4

Cái mới Toolbarkhông thể được sử dụng để thổi phồng nhiều đối tượng dòng, vì vậy không thể thêm Tab vào nó.
Nếu bạn muốn sử dụng Toolbartương tự, TabWidgetbạn có thể chèn một số Đối tượng Tab cho nó, nhưng chỉ với kiểu Holo cũ.

Ở đây có một Thư viện tùy chỉnh sử dụng v7 Toolbarnhư TabWidgetvới hoạt hình Thiết kế Vật liệu mới, nhưng nó sử dụng các phương thức tương tự từ cũ ActionBar Tabs, vì vậy bạn có thể đính kèm ViewPagervới nó.


3

Để 'thay thế' ActionBar không dùng nữa, tôi đã thay đổi loại biến kiểu ActionBar của mình thành PagerTabStrip, theo (mã cũ trong nhận xét):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Một 'thay thế' cho ~ actionBar's .selectTab (tabindex) là sử dụng phương thức ViewPager's .setCienItem (int) được liên kết của tôi, như thế này (mã cũ trong nhận xét):

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

Hy vọng điều này là hữu ích.


1

Tôi đã có cùng một vấn đề và giải pháp này phù hợp với tôi khá độc đáo:

Trong tệp xml bố cục có chứa khung nhìn, thêm PagerTabStrip như được hiển thị:

<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" />

Để kiểm soát tiêu đề trang, hãy thêm câu lệnh chuyển đổi vào tệp ViewPager của bạn:

@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;
}

0

FragmentTabhost cũng là một lựa chọn.

Mã này là từ trang web của nhà phát triển 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);
    }
}

1
Đây là một hướng dẫn bao gồm câu trả lời này, vì vậy nó có thể giúp ai đó skholingua.com/android-basic/user-interface/compổngitems / Lỗi
Dejan

0

Tôi thấy các hướng dẫn này hữu ích trong khi kết hợp một thanh hành động (bây giờ là 'thanh công cụ' - argh) hỗ trợ các tab trượt với Thiết kế Vật liệu:

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

http://www.exoguru.com/android/m vật liệu-design / navulation / android-sliding-abl-with-m Material-design.html

Bạn phải tổng hợp các tài nguyên này để phù hợp với tình huống cụ thể của bạn. Ví dụ: bạn có thể không muốn tự tạo các tab theo cùng một kiểu mà hướng dẫn exoguru.com đã làm.


Liên kết thứ hai là chết.
jcaruso

@jcaruso đó không phải là lỗi của tôi vì tên miền đó dường như đã hết hạn. Tuy nhiên, video youtube vẫn có liên quan
kip2

1
@ kip2 Tôi đồng ý, đó không phải lỗi của bạn. Tuy nhiên, tôi đề nghị như mọi người đề nghị, tránh sử dụng các liên kết để giải thích câu trả lời vì vấn đề này.
jcaruso

0

Vâng, đối với tôi để xử lý thanh công cụ điều hướng không dùng nữa bằng cách sử dụng thanh công cụ v7 widget appcompat.

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

0

Tôi nghĩ rằng một sự thay thế phù hợp khi bạn có từ ba đến năm màn hình có tầm quan trọng tương đương là bottomNavulationActivity, điều này có thể được sử dụng để chuyển các đoạn.

Bạn sẽ nhận thấy một thuật sĩ tồn tại cho điều này trong Android Studio, tuy nhiên, hãy cẩn thận vì Android Studio có xu hướng sản xuất mã tấm nồi hơi quá phức tạp.

Một hướng dẫn có thể được tìm thấy ở đây: https://android.jlelse.eu/ultimate-guide-to-bottom-navestion-on-android-75e4efb8105f

Một hướng dẫn chất lượng khác có thể được tìm thấy tại Android Hive tại đây: https://www.androidhive.info/2017/12/android-usiness-with-bottom-navlation/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.