PDA

View Full Version : تابع onMeasure در کلاس extends شده از View



smemamian
شنبه 09 آذر 1392, 22:53 عصر
سلام دوستان

وقتی کلاسی رو از View ارث بری می کنیم، تابعی به اسم onMeasure وجود داره . حالا این تابع چی کار می کنه ؟ اندازه هر ویدجت رو مشخص می کنه ؟

shahin bahari
شنبه 09 آذر 1392, 23:01 عصر
سلام
بله مشخص میکنه این ویجت شما چه قدر فضا (بر حسب پیکسل) باید اشغال کنه.

smemamian
یک شنبه 10 آذر 1392, 08:49 صبح
تشکر
در این تابع 3 شرط رو بررسی می کنند :


EXACTLY .
AT_MOST .
UNSPECIFIED

این شرط ها برای چی هست ؟

shahin bahari
یک شنبه 10 آذر 1392, 17:45 عصر
تشکر
در این تابع 3 شرط رو بررسی می کنند :



EXACTLY .
AT_MOST .
UNSPECIFIED


این شرط ها برای چی هست ؟

تو برنامه های قدیمیم یه نگاه کردم نیاز نشده بود این شرط ها رو چک کنم و این جوری مقدار داده بودم!
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = 100, height = 100;
setMeasuredDimension(width, height);
}
البته ثابت 100 نزاشته بودم. بر حسب چیزی که توش بود میومد اندازه رو حساب میکرد.
تو کد های خود TextView رو نگاه کردم, توی اون اینجوری نوشته بود:
if (heightMode == MeasureSpec.EXACTLY) {
// Parent has told us how big to be. So be it.
height = heightSize;
mDesiredHeightAtMeasure = -1;
} else {
int desired = getDesiredHeight();

height = desired;
mDesiredHeightAtMeasure = desired;

if (heightMode == MeasureSpec.AT_MOST) {
height = Math.min(desired, heightSize);
}
این جور که از این کد میشه فهمید تو حالت Exactly میاد و اندازه Parent رو برمیگردونه و تو حالت AT_MOST حداقل مقداری که باید اشغال کنه. یا میشه این طوری گفت که به ترتیب میگن که کدوم وضعیت بین Match parent,wrap content ,x dp انتخاب شده.
بسته به اینکه کدوم اینها انتخاب شده باید مقدار رو تعیین کرد ولی اگه ویجت که شما طراحی میکنید فقط خودتون استفاده میکنید و میدونید رفتارش رو این شرط ها رو بیخیال شید و مثل من همیشه فرض کنید یکی از این شرط ها انتخاب شده....