Saya memiliki beberapa tombol seperti ini di aplikasi saya:
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:textSize="24sp" />
Saya mencoba membuat tombol yang sama dengan teks dan ikon. android: drawableLeft tidak berfungsi untuk saya (Mungkin bisa, tapi saya tidak tahu cara menyetel ketinggian maksimal ke ikon).
Jadi saya membuat LinearLayout dengan ImageView dan TextView dan membuatnya berfungsi seperti tombol:
<LinearLayout
android:id="@+id/bSearch2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:padding="16dp"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:adjustViewBounds="true"
android:maxHeight="30dp"
android:maxWidth="30dp"
android:scaleType="fitCenter"
android:src="@drawable/search_icon" />
<TextView
android:id="@+id/tvSearchCaption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="24sp"
android:paddingRight="30dp"
android:gravity="center"
android:text="Search" />
</LinearLayout>
Tombol baru saya persis seperti yang saya inginkan (ukuran font, ikon dan penempatan teks). Tetapi tidak terlihat seperti tombol default saya:
Jadi saya mencoba, untuk mengubah latar belakang dan warna teks Tombol baru saya:
Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());
Ini memberikan hasil yang aneh, tombol lama saya, menjadi kacau:
Ketika saya mengubah urutan kedua tombol ini dalam XML, jadi "tombol baru" berjalan lebih dulu, itu membuat hasil yang aneh:
Sekarang saya perhatikan, bahwa ketika saya mencoba menekan tombol lama, yang baru ditekan.
Ada ide?
Untuk menambahkan gambar ke kiri, kanan, atas atau bawah, Anda dapat menggunakan atribut seperti ini:
android:drawableLeft android:drawableRight android:drawableTop android:drawableBottom
Kode sampel diberikan di atas. Anda juga dapat melakukannya dengan menggunakan tata letak relatif.
sumber
android:drawableStart
sebagai pengganti Kiri, danandroid:drawableEnd
bukannya Kanan.Untuk siapapun yang ingin melakukan ini secara dinamis maka
setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
pada objek tombol akan membantu.Sampel
Button search = (Button) findViewById(R.id.yoursearchbutton); search.setCompoundDrawables('your_drawable',null,null,null);
sumber
Inilah yang Anda inginkan.
<Button android:id="@+id/settings" android:layout_width="190dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@color/colorAccent" android:drawableStart="@drawable/ic_settings_black_24dp" android:paddingStart="40dp" android:paddingEnd="40dp" android:text="settings" android:textColor="#FFF" />
sumber
Anda dapat menggunakan Perpustakaan Komponen Material dan
MaterialButton
komponen.Gunakan atribut
app:icon
danapp:iconGravity="start"
.Sesuatu seperti:
<com.google.android.material.button.MaterialButton style="@style/Widget.MaterialComponents.Button.Icon" app:icon="@drawable/..." app:iconGravity="start" ../>
sumber
Jawaban @Liem Vo benar jika Anda menggunakan android.widget.Button tanpa menimpa. Jika Anda mengganti tema Anda menggunakan MaterialComponents, ini tidak akan menyelesaikan masalah.
Jadi, jika Anda
Gunakan app: parameter ikon .
<Button android:id="@+id/bSearch" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="Search" android:textSize="24sp" app:icon="@android:drawable/ic_menu_search" />
sumber