Bagaimana cara mendeklarasikan Bilah Alat / Bilah Tindakan ketinggian yang diperpanjang di Android Lollipop?

88

Saya telah melihat bilah aplikasi tinggi yang diperpanjang di pedoman Bilah Aplikasi Desain Google . Bagaimana cara menerapkan ini di Android Lollipop?

Chris Banes
sumber

Jawaban:

144

Anda perlu menggunakan widget Toolbar baru untuk melakukannya. Toolbar memiliki penanganan khusus untuk tinggi minimumnya untuk menyatakan jumlah ruang yang digunakan untuk tombol (dan tindakan).

Dalam contoh di bawah ini, kami menyetel tinggi menjadi 128dp (yaitu 56dp + 72dp seperti yang ditentukan dalam spesifikasi), tetapi tetap android:minHeightmenggunakan standar actionBarSize(yang biasanya 56dp). Ini berarti bahwa tombol dan tindakan dibatasi untuk diposisikan secara vertikal di 56dp teratas. Kami kemudian dapat menggunakan android:gravityuntuk memposisikan judul di bagian bawah.

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

Jika Anda menggunakan AppCompat, ubah deklarasi menjadi digunakan android.support.v7.widget.Toolbardan gunakan atributnya.

Chris Banes
sumber
3
Jika menggunakan layout_heightadalah cara yang harus ditempuh, saya berharap solusi yang dijelaskan oleh musim hujan di sini juga bukan solusi, tetapi cara yang tepat untuk melakukannya? code.google.com/p/android/issues/detail?id=77874
Thomas Keller
3
Saya ingin bisa mendeklarasikan ekspresi untuk dimensi juga, tapi kita tidak bisa.
Chris Banes
37
Untuk poin bonus @dimen/action_bar_size_x2, ukur bilah tindakan menggunakan peningkatan, misalnya , dan gunakan 112dp pada ponsel, 128dp pada tablet
Roman Nurik
7
android:paddingBottommemperkenalkan spasi aneh saat buttonGravitydisetel ke bottom. The titleMarginBottomatribut tampaknya seperti pilihan yang lebih baik di sini, tidak?
Paul Burke
5
@RomanNurik bagaimana cara kerja toolbar yang diperluas di aplikasi kalender? Ada petunjuk
Raghunandan
3

Terima kasih atas pertanyaan Anda, jawabannya, dan terlebih lagi untuk implementasi toolbar di native dan perpustakaan dukungan :)

Dan kita bisa bermain lebih banyak. Kita bisa, saat runtime, bermain dengan Height dan MinimalHeight.

Tingginya adalah tinggi ToolBar, sederhana, semua orang mengerti, dan gravitasi bekerja sesuai dengan ketinggian itu.

MinimalHeight lebih rumit dan tidak boleh minimal 56dp. MinHeight ini digunakan untuk menempatkan baris menuItem Anda. Garis ini berada di tengah minHeight Anda.

Jadi Anda dapat menambahkan kode ini ke aktivitas Anda untuk melihat sendiri perbedaannya. :)

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

Dimana toolbar berada:

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

Saat melakukan ini, Anda memperoleh: masukkan deskripsi gambar di sini

tetapi jika Anda meninggalkan animasi terus Anda mendapatkan: masukkan deskripsi gambar di sini

Inilah alasannya, menyetel bilah alat android: layout_height ke wrap_content adalah opsi yang bagus di sebagian besar kasus, karena Bilah Alat akan menyesuaikan tingginya sesuai dengan isinya (dan Anda dapat mengubah konten saat runtime :)

Dan ini juga cara Anda mengubah ukuran toolbar saat runtime.

Terima kasih Chris Banes untuk pekerjaan luar biasa yang Anda lakukan di bilah tindakan.

Mathias Seguy Android2ee
sumber
@MohammadHadi Saya membayangkan bahwa postICS akan didefinisikan seperti:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78