โหมดการนำทางในแถบแอ็คชันเลิกใช้ใน Android L


203

การดูที่รายงาน API diff สำหรับ Android "L" แสดงตัวอย่างผมเห็นว่าวิธีการทั้งหมดที่เกี่ยวข้องกับโหมดนำทางในActionBarชั้นเรียน (เช่นsetNavigationMode(), addTab(), selectTab()& c) เลิกใช้แล้ว

เอกสารอธิบาย:

โหมดการนำทางของแถบการกระทำถูกคัดค้านและไม่ได้รับการสนับสนุนโดยแถบการกระทำของแถบเครื่องมือแบบอินไลน์ พิจารณาใช้รูปแบบการนำทางทั่วไปอื่น ๆ แทน

สิ่งที่ควรเปลี่ยนคืออะไร?

นอกจากนี้ "แนวคิดการกระทำแถบเครื่องมือแบบอินไลน์" เป็นแนวคิดใหม่หรือไม่? ฉันไม่คิดว่าฉันเคยได้ยินมาก่อน


คุณพบเอกสารของ L Preview ที่ใด
Kuno

8
@KlassenK ยังไม่ได้รวมอยู่ในเอกสารหลัก แต่คุณสามารถดาวน์โหลดได้จากdeveloper.android.com/preview/reference.html
matiash

ขอบคุณสำหรับลิงค์ไปยังเอกสาร!
Robert Karl

สำหรับ setNavigationList คุณใช้อะไร
Lion789

1
@ShirishHerwade ใช่เพราะมันถูกรวมเข้ากับเอกสารหลักเมื่อ Android 5.0 เปิดตัว ไม่ว่าในกรณีใดคุณสามารถค้นหาคำบอกเลิกได้ในdeveloper.android.com/reference/android/app/ …
matiash

คำตอบ:


179

ใหม่ห้องสมุดการสนับสนุนการออกแบบของ Androidเพิ่มTabLayoutให้การดำเนินงานแท็บที่ตรงกับแนวทางการออกแบบวัสดุสำหรับแท็บ คำแนะนำแบบสมบูรณ์เกี่ยวกับวิธีใช้แท็บและViewPagerสามารถพบได้ในวิดีโอนี้

ตอนนี้เลิกใช้: PagerTabStripเป็นส่วนหนึ่งของการสนับสนุนห้องสมุด (และได้รับบางเวลา) และทำหน้าที่เป็นแทนโดยตรง หากคุณต้องการแท็บสไตล์ใหม่ของ Google Play คุณสามารถใช้ห้องสมุด PagerSlidingTabStripหรือปรับเปลี่ยนตัวอย่างใดอย่างหนึ่งของ Google ที่มีให้กับSlideTabsBasicหรือSlidingTabsColorsตามที่อธิบายไว้ในวิดีโอDev Bytesนี้


8
นี่คือการแทนที่โดยตรงในโหมดแนวตั้งพร้อมโบนัสทำให้ง่ายต่อการใช้ส่วนหัวชนิดวัสดุเพิ่มเติม อย่างไรก็ตามในโหมดแนวนอนแท็บ ActionBar จะเลื่อนขึ้นไปที่แถบแอ็คชั่นโดยอัตโนมัติซึ่งจะทำให้พื้นที่หน้าจอสำคัญ ใครรู้วิธีการจัดการกับไลบรารีสนับสนุน
ehartwell

9
เอกสารนักพัฒนายังคงบอกว่าใช้แท็บแถบการกระทำ Simlpy ยังไม่ได้อัพเดท? developer.android.com/training/implementing-navigation/ …
Romulus Urakagi Ts'ai

3
นี่คือการแทนที่สำหรับ NAVIGATION_MODE_TABS แต่ไม่ใช่สำหรับ NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTง่ายกว่ามากเพราะทุกสิ่งที่ทำก็เพิ่มสปินเนอร์และผู้ช่วยโทรกลับบางส่วน
ianhanniballake

2
สิ่งทดแทนNAVIGATION_MODE_LISTคืออะไร? Mine แสดงว่าเลิกใช้แล้ว ...
Sauron

20

ตอนนี้เอกสาร Android 5.0 พร้อมใช้งานแล้วเรามีเอกสารอย่างเป็นทางการสำหรับวิดเจ็ต Toolbar :

แถบเครื่องมือมาตรฐานสำหรับใช้ภายในเนื้อหาแอปพลิเคชัน

Toolbar เป็นลักษณะทั่วไปของแถบการกระทำเพื่อใช้ภายในโครงร่างแอปพลิเคชัน ในขณะที่แถบการดำเนินการเป็นส่วนหนึ่งของประเพณีของกิจกรรมการตกแต่งหน้าต่างทึบแสงควบคุมโดยกรอบแถบเครื่องมืออาจจะอยู่ในระดับใด ๆ โดยพลการทำรังของภายในลำดับชั้นมุมมอง

Toolbarเครื่องมือนอกจากนี้ยังสามารถนำมาใช้แทนแถบการทำงาน:

แอปพลิเคชันอาจเลือกที่จะกำหนด Toolbar เป็นแถบการกระทำสำหรับกิจกรรมโดยใช้setActionBar()วิธีการ

การคัดค้านแท็บในแถบการกระทำอาจเกิดจากสาเหตุนี้เนื่องจากแถบเครื่องมือไม่สามารถมีแท็บได้

นอกจากนี้ยังมีให้สำหรับเวอร์ชัน Android ก่อนหน้านี้ผ่านห้องสมุด appcompat ดูโพสต์นี้โดย Chris Banesสำหรับข้อมูลเพิ่มเติม ข้อความที่ตัดตอนมา:

Android 5.0 แนะนำวิดเจ็ต Toolbar ใหม่ นี่คือรูปแบบทั่วไปของ ActionBar แต่จะช่วยให้คุณมากการควบคุมมากขึ้นและมีความยืดหยุ่นในการใช้มัน Toolbar เป็นมุมมองในลำดับชั้นของคุณเหมือนกันทำให้การแทรกมุมมองส่วนที่เหลือเคลื่อนไหวตอบสนองต่อการเลื่อนเหตุการณ์ได้ง่ายขึ้น


53
"การควบคุมและความยืดหยุ่นที่มากขึ้น" เป็นสิ่งที่ดีมากหากมีค่าเริ่มต้นที่สมเหตุสมผลและใช้งานง่าย หากบางอย่างมีความยืดหยุ่น แต่คุณต้องการ 20 บรรทัดที่นี่และที่นั่นเพื่อให้ทำงานฉันไม่คิดว่ามันจะชนะ ...
TWiStErRob

1
@TWiStErRob ฉันเห็นด้วย เน้นของเขาไม่ใช่ของฉัน :)
matiash

6
@TWiStErRob ฉันรู้สึกแบบเดียวกัน ... Google ดีกว่าระวังกิจกรรมแบบนี้ทำให้ฉันนึกถึง Microsoft ตัวเก่า
Sauron

13

ดูเหมือนว่าพวกเขาเพิ่มคลาสใหม่ที่ชื่อว่าที่ขยายandroid.widget.Toolbar ViewGroupนอกจากนี้พวกเขาได้เพิ่มวิธีการใหม่ในการsetActionBar(Toolbar) Activityฉันไม่ได้ทดสอบมัน แต่ดูเหมือนว่าคุณสามารถตัดทุกชนิดTabWidgets, Spinnersหรือวิวที่กำหนดเองเป็นToolbarและใช้เป็น Actionbar ของคุณ


1
ใครบางคนสามารถแบ่งปันได้หากพวกเขาลองทำอะไรกับวิดเจ็ต Toolbar หรือรู้ว่ามันตั้งใจจะทำงานยังไง มันรวมอยู่ในแพ็คเกจความเข้ากันได้หรือไม่?
Sandra

มีลักษณะที่plus.google.com/+IanLake/posts/...
Kuno

1
ขอบคุณมากสำหรับการเชื่อมโยง .. ดังนั้นตอนนี้ถ้าฉันต้องการพัฒนาแอพที่เป็นไปตามแนวทางวัสดุใหม่ฉันควรรอให้แถบเครื่องมือพร้อมใช้งานเพราะถ้าฉันใช้ actionbar ฉันจะใช้ทุกอย่าง นั่นเลิกแล้ว ..
Sandra

1
ActionBar จะยังคงเป็นรูปแบบการออกแบบมาตรฐาน เฉพาะโหมดการนำทางที่จะเลิกใช้ (แท็บหรือสปินเนอร์) ดูdeveloper.android.com/guide/topics/ui/actionbar.html#Tabsและdeveloper.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
ฉันคิดว่ามันเกี่ยวข้องกับคำถาม .. แอปพลิเคชันใหม่ของ i / o 2014 มีให้ดาวน์โหลดและคุณสามารถดูได้จากplus.google.com/+RomanNurik/posts/PD6MS3feXTTมีรูปแบบแถบเครื่องมือมากมายที่ใช้ . เราเพียงแค่ต้องรอซอร์สโค้ดและสำรวจตอนนั้น :(
Sandra

4

ใหม่Toolbarไม่สามารถใช้สำหรับขยายวัตถุหลายบรรทัดได้ดังนั้นจึงเป็นไปไม่ได้ที่จะเพิ่มแท็บลงไป
ถ้าคุณต้องการที่จะใช้สิ่งที่Toolbarคล้ายกันTabWidgetคุณสามารถแทรกวัตถุแท็บบางอย่างเข้ากับมันได้ แต่ใช้สไตล์ Holo แบบเก่าเท่านั้น

ที่นี่มี Library แบบกำหนดเองที่ใช้ v7 Toolbarเช่นเดียวTabWidgetกับภาพเคลื่อนไหว Material Design ใหม่ แต่มันใช้วิธีการเดียวกันจากเดิมActionBar Tabsเพื่อให้คุณสามารถแนบViewPagerกับมันได้


3

สำหรับ 'การแทนที่' ของ ActionBar ที่เลิกใช้แล้วฉันเปลี่ยนประเภทของตัวแปรชนิด ActionBar เป็น PagerTabStrip ตาม (รหัสเก่าในความคิดเห็น):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

'การแทนที่' สำหรับ ~ actionBar's .selectTab (tabindex) คือการใช้เมธอด .setCurrentItem (int) ของ ViewPager ที่เกี่ยวข้องเช่นนี้ (รหัสเก่าในความคิดเห็น):

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

หวังว่านี่จะเป็นประโยชน์


1

ฉันมีปัญหาเดียวกันและวิธีนี้เหมาะกับฉันอย่างมาก:

ในไฟล์ layout xml ที่มี viewpager ให้เพิ่ม PagerTabStrip ดังที่แสดง:

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

หากต้องการควบคุมชื่อหน้าให้เพิ่มคำสั่ง switch ลงในไฟล์ ViewPager ของคุณ:

@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 เป็นตัวเลือกเช่นกัน

รหัสนี้มาจากเว็บไซต์ของผู้พัฒนา 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
นี่คือแบบฝึกหัดที่มีคำตอบนี้ดังนั้นจึงอาจช่วยให้ใครบางคนskholingua.com/android-basic/user-interface/compositeitems/ …
Dejan

0

ฉันพบบทเรียนเหล่านี้มีประโยชน์ในขณะที่ใส่แถบแอ็คชั่น (ตอนนี้ 'แถบเครื่องมือ' - argh) ที่สนับสนุนแท็บเลื่อนด้วยการออกแบบวัสดุ:

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

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

คุณต้องสังเคราะห์ทรัพยากรเหล่านี้เพื่อให้ตรงกับสถานการณ์เฉพาะของคุณ ตัวอย่างเช่นคุณอาจไม่ต้องการสร้างแท็บด้วยตนเองในลักษณะเดียวกับที่บทช่วยสอน exoguru.com ทำ


ลิงค์ที่สองเสียชีวิต
jcaruso

@jcaruso นั่นไม่ใช่ความผิดของฉันเนื่องจากโดเมนนั้นหมดอายุแล้ว วิดีโอ youtube ยังคงมีความเกี่ยวข้อง
kip2

1
@ kip2 ฉันเห็นด้วยไม่ใช่ความผิดของคุณ อย่างไรก็ตามฉันขอแนะนำให้ทุกคนแนะนำหลีกเลี่ยงการใช้ลิงก์เพื่ออธิบายคำตอบเนื่องจากปัญหานี้
jcaruso

0

ดีสำหรับฉันที่จะจัดการกับแถบเครื่องมือนำทางที่คัดค้านโดยใช้แถบเครื่องมือวิดเจ็ต v7 appcompat

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

0

ฉันคิดว่าการแทนที่ที่เหมาะสมสำหรับเมื่อคุณมีสามถึงห้าหน้าจอที่มีความสำคัญเท่าเทียมกันคือ BottomNavigationActivity สิ่งนี้สามารถใช้เพื่อเปลี่ยนชิ้นส่วนได้

คุณจะสังเกตเห็นว่ามีวิซาร์ดสำหรับตัวนี้ใน Android Studio แต่เนื่องจาก Android Studio มีแนวโน้มที่จะสร้างรหัสแผ่นบอยเลอร์ที่ซับซ้อนเกินไป

สามารถพบบทเรียนการสอนได้ที่นี่: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

คุณสามารถพบบทช่วยสอนคุณภาพอื่นได้ที่ Android Hive ที่นี่: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.