Bisakah atribut ini diubah secara dinamis dalam kode Java?
android:layout_marginRight
Saya punya TextView
, yang harus mengubah posisinya beberapa piksel ke kiri secara dinamis.
Bagaimana cara melakukannya secara terprogram?
EDIT: Cara yang lebih umum untuk melakukan ini yang tidak bergantung pada tipe tata letak (selain itu itu adalah tipe tata letak yang mendukung margin):
public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
Anda harus memeriksa dokumen untuk TextView . Pada dasarnya, Anda ingin mendapatkan objek LayoutParams TextView, dan memodifikasi margin, lalu mengaturnya kembali ke TextView. Dengan asumsi itu ada dalam LinearLayout, coba sesuatu seperti ini:
TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);
Saya tidak bisa mengujinya sekarang, jadi casting saya mungkin tidak aktif sedikit, tetapi LayoutParams adalah apa yang perlu dimodifikasi untuk mengubah margin.
Jangan lupa bahwa jika TextView Anda ada di dalam, misalnya, RelativeLayout , orang harus menggunakan RelativeLayout.LayoutParams alih-alih LinearLayout.LayoutParams
Gunakan LayoutParams (seperti yang sudah dijelaskan). Namun hati-hati LayoutParams mana yang harus dipilih. Menurut https://stackoverflow.com/a/11971553/3184778 "Anda harus menggunakan yang terkait dengan ORANGTUA dari tampilan yang sedang Anda kerjakan, bukan tampilan yang sebenarnya"
Jika misalnya TextView ada di dalam TableRow, maka Anda perlu menggunakan TableRow.LayoutParams alih-alih RelativeLayout atau LinearLayout
sumber
Gunakan fungsi ini untuk mengatur semua jenis margin
sumber
Pembaruan: Android KTX
The modul inti KTX menyediakan ekstensi untuk perpustakaan umum yang merupakan bagian dari kerangka Android,
androidx.core.view
di antara mereka.Fungsi ekstensi berikut berguna untuk menangani margin:
setMargins()
fungsi ekstensi:Mengatur margin semua sumbu di
ViewGroup
'sMarginLayoutParams
. (Dimensi harus disediakan dalam piksel, lihat bagian terakhir jika Anda ingin bekerja dengan dp)updateMargins()
fungsi ekstensi:Update margin di
ViewGroup
'sViewGroup.MarginLayoutParams
.updateMarginsRelative()
fungsi ekstensi:Memperbarui margin relatif
ViewGroup
diMarginLayoutParams
(mulai / akhir bukan kiri / kanan).Properti ekstensi berikut berguna untuk mendapatkan margin saat ini:
dp
bukanpx
:Jika Anda ingin bekerja dengan
dp
(piksel yang tidak tergantung kepadatan)px
, Anda harus mengonversinya terlebih dahulu. Anda dapat dengan mudah melakukannya dengan properti ekstensi berikut:Kemudian Anda dapat memanggil fungsi ekstensi sebelumnya seperti:
Jawaban lama:
Di Kotlin Anda dapat mendeklarasikan fungsi ekstensi seperti:
Maka Anda bisa menyebutnya seperti:
Atau:
sumber