Saya mencoba untuk mendapatkan ketinggian ActionBar
(menggunakan Sherlock) setiap kali aktivitas dibuat (khusus untuk menangani perubahan konfigurasi pada rotasi di mana ketinggian ActionBar mungkin berubah).
Untuk ini saya menggunakan metode ActionBar.getHeight()
yang hanya berfungsi ketika ActionBar
ditampilkan.
Ketika aktivitas pertama kali dibuat untuk pertama kalinya, saya dapat menelepon getHeight()
kembali onCreateOptionsMenu
. Tetapi metode ini tidak dipanggil setelah.
Jadi pertanyaan saya adalah kapan saya bisa memanggil getHeight () dan yakin bahwa itu tidak mengembalikan 0? Atau jika tidak memungkinkan, bagaimana saya bisa mengatur ketinggian ActionBar?
Dalam XML, Anda harus menggunakan atribut ini:
sumber
android.support.v7.appcompat.R.attr.actionBarSize
. Jika Anda ingin menggunakannya di tata letak xmlandroid:paddingTop="?attr/actionBarSize"
,. Bekerja dengan baik di mana-mana.Ok saya sudah googling dan mendapatkan ke posting ini beberapa kali jadi saya pikir itu akan baik untuk dijelaskan tidak hanya untuk Sherlock tetapi untuk appcompat juga:
Tinggi Action Bar menggunakan appCompat
Mirip dengan deskripsi @Anthony, Anda dapat menemukannya dengan kode berikut (Saya baru saja mengubah id sumber daya):
Pre Sandwitch Problem
Saya membutuhkan ketinggian bilah tindakan karena pada perangkat ICE_CREAM_SANDWITCH pra, pandangan saya tumpang tindih dengan bilah tindakan. Saya mencoba mengatur android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize", pengaturan tumpang tindih untuk melihat / actionbar dan bahkan memperbaiki tinggi actionbar dengan tema khusus tetapi tidak ada yang berhasil. Seperti itulah tampilannya:
Sayangnya saya menemukan bahwa dengan metode yang dijelaskan di atas saya hanya mendapatkan setengah dari tinggi (saya berasumsi bahwa bar opsi tidak diambil di tempat) sehingga untuk benar-benar memperbaiki isue saya perlu menggandakan aksi bar tinggi dan semuanya tampak ok:
Jika seseorang tahu solusi yang lebih baik (daripada menggandakan actionBarHeight) Saya akan senang memberi tahu saya karena saya berasal dari pengembangan iOS dan saya menemukan sebagian besar hal tampilan Android cukup membingungkan :)
Salam,
hris.to
sumber
ActionBar.getHeight()
. Bergantung pada situasinya, itu mungkin cocok untuk Anda juga.layout_gravity="center_vertical"
? Ubah ke"bottom"
. Android 2.3 menangani margin di FrameLaoyut secara berbeda dari Android yang lebih baru.@Anthony answer berfungsi untuk perangkat yang mendukung
ActionBar
dan untuk perangkat yang hanya mendukungSherlock Action Bar
metode berikut ini harus digunakansumber
com.actionbarsherlock.R.attr.actionBarSize
bekerja untuk Android 2.3 dan 4.0, jadi sepertinya Anda dapat menggunakan ini terlepas dari versi Android.Saya pikir cara teraman adalah:
sumber
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Untuk mengatur ketinggian
ActionBar
Anda dapat membuat yang baruTheme
seperti ini:dan atur ini
Theme
untuk AndaActivity
:sumber
Jawa:
xml:
sumber
Jika Anda menggunakan Bilah Alat sebagai ActionBar,
kemudian gunakan saja layout_height pada bilah alat.
sumber
Anda dapat menggunakan fungsi ini untuk mendapatkan ketinggian actionbar.
sumber
Metode penolong ini harus berguna bagi seseorang. Contoh:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
sumber
Anda hanya perlu menambahkan ini.
sumber
Saya menemukan cara yang lebih umum untuk menemukannya:
di mana ' mainView ' adalah tampilan root tata letak Anda.
Idenya pada dasarnya adalah mendapatkan posisi Y dari mainView karena diatur tepat di bawah ActionBar (atau Toolbar).
sumber
Tinggi bilah tindakan berbeda sesuai dengan tema yang diterapkan. Jika Anda menggunakan AppCompatActivity ketinggian akan berbeda di sebagian besar kasus dari Aktivitas normal.
Jika Anda menggunakan AppCompatActivity, Anda harus menggunakan R.attr.actionBarSize alih-alih android.R.attr.actionBarSize
sumber
Di xml, Anda bisa menggunakan? Attr / actionBarSize, tetapi jika Anda membutuhkan akses ke nilai itu di Java, Anda perlu menggunakan kode di bawah ini:
sumber
Metode yang siap untuk memenuhi jawaban paling populer:
sumber
Berikut ini adalah versi yang diperbarui dengan Kotlin yang saya gunakan dengan asumsi ponsel lebih tinggi dari Honeycomb:
sumber
Jika Anda menggunakan Xamarin / C #, ini adalah kode yang Anda cari:
sumber
sumber
Cara sederhana untuk menemukan ketinggian bilah tindakan adalah dari
onPrepareOptionMenu
metode Aktivitas .sumber
Di javafx (menggunakan Gluon), tingginya diatur pada saat runtime atau semacamnya. Sementara bisa mendapatkan lebar seperti biasa ...
double width = appBar.getWidth();
Anda harus membuat pendengar:
GluonApplication application = this;
... Dan ambil nilai terakhir yang diubahnya. Untuk mendapatkan ketinggian.
sumber
Setelah mencoba semua yang ada di luar sana tanpa hasil, saya menemukan, secara tidak sengaja, cara yang fungsional dan sangat mudah untuk mendapatkan tinggi standar action bar.
Hanya diuji dalam API 25 dan 24
C #
Jawa
sumber