Saya sedang berupaya menggunakan Toolbar yang baru ditambahkan yang diperkenalkan di Lollipop dan perpustakaan AppCompat-v7. Saya mengikuti panduan ini tentang pengaturan Toolbar. Saya perhatikan ketika Anda memanggil sesuatu yang akan memunculkan ActionBar kontekstual (seperti menyorot teks untuk disalin / ditempelkan), itu akan mendorong Toolbar ke bawah pada halaman. Anda dapat melihat apa yang saya bicarakan dalam gambar di bagian bawah halaman:
Jadi, pada dasarnya, saya mengaturnya seperti ini. Saya memiliki Toolbar yang didefinisikan dalam file xml yang saya gunakan dengan menyertakan tag:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Lalu, saya instantiate dalam pandangan saya:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
Dalam kode, saya mengaturnya seperti ini:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Adakah yang tahu cara membuatnya sehingga ActionBar Kontekstual muncul di atas Toolbar?
Jawaban:
Memperbarui:
Solusi: gunakan properti windowActionModeOverlay . Atur ini dalam tema Anda:
dan actionmode akan ditampilkan di atas panel tindakan alih-alih menekannya. (Jika Anda tidak menggunakan AppCompat terbaru maka Anda perlu menambahkan awalan "android:" ke properti). Ini pada dasarnya membuat AppCompat tahu bahwa Anda memiliki bilah alat yang terletak di bagian atas layar dan harus menggambar ActionMode di atasnya.
Jawaban lama / solusi:
Saya mengalami masalah yang sama. Apa pun tema yang saya tetapkan, selalu menekan Toolbar yang saya tetapkan sebagai ActionBar. Saya mencoba dengan dan tanpa perpustakaan pendukung, tetapi itu tidak masalah.
Sayangnya saya tidak dapat memperbaikinya jadi saya telah membangun solusi. Di saya
ActionModeCallback
,onCreateActionMode
saya menyembunyikan bilah tindakan:dan di
onDestroyActionMode
saya tunjukkan lagi:Penyembunyian / tampilan terjadi sangat cepat sehingga tidak terlihat pada perangkat pengujian saya. Tentu saja ada sisi negatifnya: meskipun animasi enter masih berfungsi, animasi keluar dari panel tindakan kontekstual hilang karena Toolbar segera muncul. Tetapi sampai kita menemukan solusi yang lebih baik saya kira kita terjebak dengan ini.
(Aktivitas saya sebenarnya memperluas
BaseActivity
kelas khusus yang memiliki metode yang disebutgetActionBarToolbar()
, diambil dari kode sumber aplikasi Google I / O 2014 , jadi saya bisa dengan mudah mendapatkan mengambil Bilah Alat:Sayang sekali aplikasi I / O tidak menggunakan bilah tindakan kontekstual.)
sumber
Jangan memulainya pada aktivitas Anda, tetapi pada bilah alat Anda. Dalam aktivitas Anda:
dan Anda harus menggunakan
sumber
AppCompatActivity.startSupportActionMode(callback)
, untuk mendapatkan kompatibilitas dengan atribut sepertiapp:iconTint
di item menu xmls.Hanya tambahan kecil: Untuk
untuk bekerja, penting untuk memanggilsuper.onCreate(savedInstanceState)
SEBELUM memanggilsetContentView(R.layout.your_activity)
aktivitas Anda. Ini benar-benar membuat perbedaan dalam hal ini!sumber
Dalam kasus saya,
<item name="windowActionModeOverlay">true</item>
tidak bekerja, tapi pekerjaan ini:<item name="android:windowActionModeOverlay">true</item>
, yangandroid
adalah kuncinya.sumber
<item name="windowActionModeOverlay">true</item>
dengan appcompat toolbar, jika tidak Anda menggunakanandroid
namespace.Solusi Jacob bekerja untuk saya tetapi ActionBar kontekstual transparan dan Toolbar terlihat melaluinya. Ini dapat diatasi sebagai berikut:
Tema "AppTheme.Base" harus menjadi tema yang diterapkan pada Bilah Alat.
Lebih detail tentang styling ActionBar kontekstual:
cara Menyesuaikan Bilah Tindakan Kontekstual menggunakan appCompat dalam desain material
sumber
Metode yang sangat berguna untuk membawa bilah alat ke depan
toolbar.bringToFront()
sumber
View.bringToFront()
adalah operasi yang sangat berat dan umumnya harus dihindari dengan biaya berapa pun.Tambahan kecil lainnya: pastikan untuk mengatur setidaknya layar kosong dalam aktivitas melalui
setContentView(R.layout.empty_screen)
jika Anda memuat seluruh ui dalam fragmen (ft.replace(android.R.id.content, fragment)
).sumber