ฉันจะประกาศแถบเครื่องมือ / แถบการกระทำที่มีความสูงเพิ่มขึ้นบน Android Lollipop ได้อย่างไร


88

ผมเคยเห็นการขยายความสูงบาร์ของแอปใน Google ออกแบบApp Barแนวทาง ฉันจะใช้สิ่งเหล่านี้ใน Android Lollipop ได้อย่างไร

คำตอบ:


144

คุณต้องใช้วิดเจ็ตToolbarใหม่เพื่อให้บรรลุสิ่งนี้ Toolbar มีการจัดการพิเศษสำหรับความสูงต่ำสุดเพื่อประกาศจำนวนพื้นที่ที่ใช้สำหรับปุ่ม (และการทำงาน)

ในตัวอย่างด้านล่างเรากำลังตั้งค่าความสูงเป็น 128dp (ซึ่งก็คือ 56dp + 72dp ตามที่กำหนดไว้ในข้อมูลจำเพาะ) แต่ยังคงandroid:minHeightเป็นมาตรฐานactionBarSize(ซึ่งโดยปกติคือ 56dp) ซึ่งหมายความว่าปุ่มและการทำงานถูก จำกัด ให้อยู่ในตำแหน่งแนวตั้งใน 56dp ด้านบน จากนั้นเราสามารถใช้android:gravityเพื่อวางตำแหน่งหัวเรื่องที่ด้านล่าง

<Toolbar
    android:id="@+id/toolbar"
    android:layout_height="128dp"
    android:layout_width="match_parent"
    android:minHeight="?android:attr/actionBarSize"
    android:background="?android:attr/colorPrimary"
    android:gravity="bottom" />

หากคุณใช้ AppCompat ให้เปลี่ยนการประกาศเพื่อใช้android.support.v7.widget.Toolbarแทนและใช้แอตทริบิวต์


3
หากใช้layout_heightเป็นวิธีที่จะไปฉันคาดว่าวิธีแก้ปัญหาที่อธิบายโดยมรสุมที่นี่ไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีที่เหมาะสมที่จะไป? code.google.com/p/android/issues/detail?id=77874
Thomas Keller

3
ฉันชอบที่จะสามารถประกาศการแสดงออกของมิติได้เช่นกัน แต่เราทำไม่ได้
Chris Banes

37
สำหรับคะแนนโบนัสให้ปรับขนาดแถบการดำเนินการโดยใช้การเพิ่มขึ้นเช่น@dimen/action_bar_size_x2และใช้ 112dp บนโทรศัพท์ 128dp บนแท็บเล็ต
Roman Nurik

7
android:paddingBottomแนะนำการเว้นวรรคแปลกเมื่อมีการตั้งค่าbuttonGravity แอตทริบิวต์ดูเหมือนว่าตัวเลือกที่ดีที่นี่ไม่? bottomtitleMarginBottom
Paul Burke

5
@RomanNurik แถบเครื่องมือที่ขยายในแอปปฏิทินทำงานอย่างไร คำใบ้ใด ๆ
Raghunandan

3

ขอบคุณสำหรับคำถามคำตอบและยิ่งไปกว่านั้นสำหรับการใช้งานแถบเครื่องมือในเนทีฟและ supportlibrary :)

และเราสามารถเล่นได้มากขึ้น ในรันไทม์เราสามารถเล่นกับความสูงและความสูงน้อยที่สุด

ความสูงคือความสูงของ ToolBar มันง่ายทุกตัวเข้าใจและแรงโน้มถ่วงก็ทำหน้าที่ตามความสูงนั้น

ความสูงน้อยที่สุดนั้นยุ่งยากกว่าและไม่ควรต่ำสุด 56dp minHeight นี้ใช้เพื่อวางบรรทัดของ menuItem ของคุณ บรรทัดนี้อยู่กึ่งกลางของ minHeight

ดังนั้นคุณสามารถเพิ่มรหัสนี้ในกิจกรรมของคุณเพื่อดูความแตกต่างด้วยตัวเอง :)

Runnable toolBarAnimator=new Runnable() {
        @Override
        public void run() {
            if(postICS){
//                toolbar.setTranslationX(iteration);
//                toolbar.setElevation(iteration);
                toolbar.setMinimumHeight(iteration * 5);
                toolbar.getLayoutParams().height++;
            }
            uiThreadHanlder.postDelayed(this,16);
            iteration++;
            if(iteration>150)iteration=0;
        }
    };
    Handler uiThreadHanlder=new Handler();
    int iteration=0;


    @Override
    protected void onResume() {
        super.onResume();
        //launch the animation
        uiThreadHanlder.postDelayed(toolBarAnimator, 1000);
    }


    @Override
    protected void onPause() {
        super.onPause();
        //stop the animation
        uiThreadHanlder.removeCallbacks(toolBarAnimator);
    }

แถบเครื่องมืออยู่ที่ไหน:

แถบเครื่องมือ = (Toolbar) findViewById (R.id.toolbar);

เมื่อทำสิ่งนี้คุณจะได้รับ: ป้อนคำอธิบายภาพที่นี่

แต่ถ้าคุณปล่อยให้แอนิเมชันดำเนินต่อไปคุณจะได้รับ: ป้อนคำอธิบายภาพที่นี่

ด้วยเหตุนี้การตั้งค่าแถบเครื่องมือ android: layout_height เป็น wrap_content จึงเป็นตัวเลือกที่ดีในกรณีส่วนใหญ่เนื่องจาก Toolbar จะปรับความสูงตามเนื้อหา (และคุณสามารถเปลี่ยนเนื้อหาได้เมื่อรันไทม์ :)

และนี่คือวิธีที่คุณเปลี่ยนขนาดแถบเครื่องมือขณะรันไทม์

ขอบคุณ Chris Banes สำหรับผลงานที่น่าทึ่งที่คุณทำบนแถบการทำงาน


@MohammadHadi ฉันจินตนาการว่าโพสต์ ICS จะถูกกำหนดให้เป็น:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.