มีหลายกรณีที่เราควรสร้าง Dynamic View แทนการสร้าง View ใน XML ในสถานการณ์นั้น เราควรจะต้องดึงขนาดของ View นี่คือวิธีง่ายๆ ในการดึงขนาดของ View ใน Android
เพื่อดึงความสูงของ View ใดๆ ใช้โค้ดต่อไปนี้
int width = view.getMeasuredHeight();
เพื่อดึงความกว้างของ View ใดๆ ใช้โค้ดต่อไปนี้
int height = view.getMeasuredWidth();
ก่อนดึงความกว้างและความสูง เราควรกำหนด Default Measure ให้ View ดังนี้
view.measure(0, 0);
ในโค้ดข้างต้น View คือเช่น TextView, EditText, Button ฯลฯ นี่คือตัวอย่างสาธิตการหาขนาดของ View ใน Android
Step 1 - สร้าง Project ใหม่ใน Android Studio ไปที่ File → New Project และกรอกรายละเอียดทั้งหมดเพื่อสร้าง Project ใหม่
Step 2 - เพิ่มโค้ดต่อไปนี้ใน res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/rootview" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> </LinearLayout>
ในตัวอย่างข้างต้นเราไม่มี View ใดๆ เราสร้างแค่ Root View / Parent View เราสามารถเพิ่ม Child View ใน Java ได้ดังนี้
import android.os.Bundle; import android.support.constraint.ConstraintLayout; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { ConstraintLayout constraintLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView msg = new TextView(this); msg.setText("sample text for checking dimensions"); msg.setPadding(10, 10, 10, 10); msg.measure(0, 0); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(5, 15, 0, 0); msg.setLayoutParams(params); msg.setGravity(Gravity.CENTER); LinearLayout layout = (LinearLayout) findViewById(R.id.rootview); layout.addView(msg); int width = msg.getMeasuredHeight(); int height = msg.getMeasuredWidth(); Toast.makeText(this, "width " + String.valueOf(width) + " height " + String.valueOf(height), Toast.LENGTH_LONG).show(); } }ในตัวอย่างข้างต้นเราสร้าง TextView แบบไดนามิกและเพิ่มคุณสมบัติของ TextView เช่น setText(), setPadding(), setGravity() เรากำหนด Layout Params ให้ TextView ดังนี้
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(5, 15, 0, 0); msg.setLayoutParams(params);
ตอนนี้เราต้อง Append Text View เข้า Parent View ดังนี้
LinearLayout layout = (LinearLayout) findViewById(R.id.rootview); layout.addView(msg);
สุดท้ายเราใช้ getMeasuredHeight() และ getMeasuredWidth() เพื่อหาความสูงและความกว้างของ Text View ดังนี้
int width = msg.getMeasuredHeight(); int height = msg.getMeasuredWidth(); Toast.makeText(this, "width " + String.valueOf(width) + " height " + String.valueOf(height), Toast.LENGTH_LONG).show();
ลองรันแอปพลิเคชันของคุณ สมมติว่าคุณเชื่อม Android Device จริงกับคอมพิวเตอร์แล้ว เพื่อรันแอปจาก Android Studio ให้เปิดไฟล์ Activity ของโปรเจกต์และคลิกไอคอน Run จาก Toolbar เลือก Mobile Device ของคุณเป็นตัวเลือก และตรวจสอบ Mobile Device ซึ่งจะแสดงหน้าจอ Default

ในหน้าจอข้างต้นเราได้ขนาดของ TextView ใน Toast