Saya ingin menampilkan pencarian kustom di actionbar (saya menggunakan ActionBarSherlock untuk itu).
Saya tahu:
Tapi saya ingin membuat tata letak khusus (bidang edittext) untuk memenuhi seluruh lebar yang tersedia.
Saya telah menerapkan tata letak khusus seperti yang disarankan di sini .
Ada tata letak khusus saya search.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="?attr/actionButtonStyle"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_horizontal"
android:focusable="true" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|fill_horizontal" >
<EditText
android:id="@+id/search_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|center"
android:background="@drawable/bg_search_edit_text"
android:imeOptions="actionSearch"
android:inputType="text" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:src="@drawable/ic_search_arrow" />
</FrameLayout>
</LinearLayout>
Dan di MyActivity
:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_action_search);
LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.search, null);
actionBar.setCustomView(v);
Bagaimana saya bisa membuat tata letak khusus untuk memenuhi semua lebar yang tersedia actionBar
?
Tolonglah.
Jawaban:
Ada trik untuk ini. Semua harus Anda lakukan adalah dengan menggunakan
RelativeLayout
bukanLinearLayout
sebagai wadah utama. Penting untukandroid:layout_gravity="fill_horizontal"
mengaturnya. Itu harus dilakukan.sumber
Saya berjuang dengan ini sendiri, dan mencoba jawaban Tomik. Namun, ini tidak membuat tata letak menjadi lebar penuh yang tersedia di awal, hanya saat Anda menambahkan sesuatu ke tampilan.
Anda harus mengatur
LayoutParams.FILL_PARENT
saat menambahkan tampilan:Dengan cara ini sepenuhnya mengisi ruang yang tersedia. (Anda mungkin perlu menggunakan solusi Tomik juga).
sumber
Beginilah cara kerjanya untuk saya (dari jawaban di atas itu menunjukkan judul default dan tampilan kustom saya juga).
Yang saya perhatikan adalah keduanya
setCustomView(view)
dansetCustomView(view,params)
view width = match / fill parent. setDisplayShowCustomEnabled (boolean showCustom)sumber
Jawaban dari Tomik dan Peterdk berfungsi jika Anda ingin tampilan kustom memenuhi seluruh bilah tindakan, bahkan menyembunyikan judul asli.
Tetapi jika Anda ingin tampilan kustom Anda hidup berdampingan dengan judul (dan mengisi semua ruang yang tersisa setelah judul ditampilkan), izinkan saya merujuk Anda ke jawaban yang sangat baik dari pengguna Android-Developer di sini:
https://stackoverflow.com/a/16517395/614880
Kode di bawahnya bekerja dengan sempurna untuk saya.
sumber
Misalnya, Anda dapat menentukan file tata letak yang berisi elemen EditText.
Anda dapat melakukan
sumber
Ada contoh di aplikasi peluncur Android (saya telah membuat pustaka darinya, di sini), di dalam kelas yang menangani pengambilan wallpaper ("WallpaperPickerActivity").
Contoh tersebut memperlihatkan bahwa Anda perlu menyetel tema yang disesuaikan agar ini berfungsi. Sayangnya, ini berfungsi untuk saya hanya menggunakan kerangka kerja normal, dan bukan salah satu pustaka dukungan.
Inilah temanya:
styles.xml
nilai-v19 / styles.xml
EDIT: ada cara yang lebih baik untuk melakukannya, yang juga berfungsi di pustaka dukungan. Cukup tambahkan baris kode ini daripada yang saya tulis di atas:
sumber