Saya mengode tampilan kustom, diperpanjang dari RelativeLayout, dan saya ingin mengubah ukurannya secara terprogram, Bagaimana saya bisa melakukannya?
Kelas tampilan kustom adalah sesuatu seperti:
public ActiveSlideView(Context context, AttributeSet attr){
super(context, attr);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(inflater != null){
inflater.inflate(R.layout.active_slide, this);
}
Masalah terpecahkan!
CATATAN: Pastikan untuk menggunakan Layout induk
LayoutParams
. Milik sayaLinearLayout.LayoutParams
!sumber
RelativeLayout.LayoutParams?
private void resizeView(View view, int newWidth, int newHeight) { try { Constructor<? extends LayoutParams> ctor = view.getLayoutParams().getClass().getDeclaredConstructor(int.class, int.class); view.setLayoutParams(ctor.newInstance(newWidth, newHeight)); } catch (Exception e) { e.printStackTrace(); } }
Ini bekerja untuk saya:
sumber
Untuk apa nilainya, katakanlah Anda ingin mengubah ukuran tampilan dalam piksel independen perangkat ( dp ): -
Anda perlu menggunakan metode yang disebut
applyDimension
, yaitu anggota kelasTypedValue
untuk mengkonversi dari piksel ke dps. Jadi jika saya ingin mengatur ketinggian ke 150dp (katakanlah) - maka saya bisa melakukan ini:di mana ekspresi:
getResources().getDisplayMetrics()
mendapatkan kepadatan layar / resolusisumber
float pixels = context.getResources().getDimensionPixelSize(R.dimen.card_height);
Di Kotlin, Anda dapat menggunakan ekstensi ktx :
sumber
coba yang ini:
sumber
Berikut versi yang lebih umum dari solusi di atas dari @herbertD:
sumber
Saya menggunakan cara ini untuk meningkatkan lebar tampilan kustom
sumber
Saya menyelesaikannya dengan cara ini .. Saya pada dasarnya memiliki tampilan sederhana di dalam file xml.
sumber
https://stackoverflow.com/q/44259342/6596724
Jika Anda hanya memiliki
two or three condition(sizes)
maka Anda dapat menggunakan @OverideonMeasure
sukasumber
jika Anda mengganti
onMeasure
, jangan lupa untuk memperbarui ukuran barusumber
Beginilah cara saya mencapai ini. Dalam jawaban Sileria dia melakukan hal berikut:
Ini benar, tetapi mengharapkan kita untuk memberikan ketinggian
pixels
, tapi saya ingin memberidp
saya ingin ketinggian jadi saya menambahkan:Jadi akan terlihat seperti ini:
sumber
Inilah yang saya lakukan:
Jika ada grup tampilan yang dimiliki oleh tampilan ini, Anda mungkin perlu memanggil yourViewGroup.requestLayout () agar dapat diterapkan.
sumber