آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

موقعیت یک view در صفحه

kazemian  9 سال پیش  9 سال پیش
0 0

سلام دوستان،من یک button دارم که میخوام موقعیتش رو روی صفحه تشخیص بدم.مثلا نسبت به چپش چقد فاصله داره

از دستور btn. getleft استفاده کردم اما وقتی مقدارش رو log میکنم صفر برمیگردونه درحالی که درست مرکز صفحه قرار داره

چطوری میتونم موقعیتش رو بگیرم؟

+1 0
سلام ، خب getleft موقعیتش رو نسبت به لایه parrent حساب میکنه . اگه صفر میده احتمالا خود دکمه داخل یه لایه با ابعاد wrap content هست . یا لایه رو حذف کنید یا متد getleft رو برای لایه بنویسید . (9 سال پیش)
+1 0
دوستمون درست میگه البته میتونید اینجوری هم موقعیت رو بگیرید فکر کنم view .getParent.getLeft (9 سال پیش)
0 0
ممنونم از این که جوابم رو دادین ، من یک RelativeLayout دارم که از نظر عرض و ارتفاع match parent هستن ، وسط لایه ی Relative ، دکمم رو گذاشتم ، اما باز هم موقعیت دکمه رو صفر میده ، کلا من میخوام اندازه ی view رو بر اساس صفحه بگیرم نه لایه ی پدرش،چطوری میتونم این کارو بکنم؟ (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Saleh  9 سال پیش
+2 0

خوب من جوابش رو میدونم فکر کنم اگه این تاپیک رو نمیدیدم مثل من حد اقل یک روز علاف بشید تا بفهمبد مشکل از چیه.
احتمالا شما داخل onCreate مقدار رو میگیرید
چون RelativeLayout  دوبار رندر میشه رندر شدنش بیشتر از بقیه ویو ها زمان میبره و چون شما در همون ابتدا دارید مقدار ویویی که داخلش هست رو میگیرید چون هنوز لود نشده مقدار رو صفر بر میگردونه پس راه حل چیه؟
یک متد به صورت زیر بنویسید:

     public void onLoadActivity(final View v) {
        ViewTreeObserver vto = v.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            public boolean onPreDraw() {
                v.getViewTreeObserver().removeOnPreDrawListener(this);

//v.getLeft ...

                return true;
            }
        });
    }

سپس داخل oncreate صداش بزنید و ویویی که میخواید موقعیتش رو بگیرید به عنوان ورودی براش بفرستید

 onLoadActivity(yourView);

کار متد onLoadActivity اینه که چک میکنه هر وقت ویوی مورد نظر کاملا لود شد اونوقت عملیات شما رو انجام میده

موفق باشید

0 0
دمت گررررررررررم واقعا ، خیلی درگیرش بودم (9 سال پیش)
پاسخ به سوال 
Reza  9 سال پیش
+2 0

این موقعیت رو در صفحه میده :

private float btn_Left, btn_Top, btn_Right, btn_Bottom;
private int[] location_Of_Btn;
 
View btn= findViewById(R.id.btn);

btn.getLocationOnScreen(location_Of_Btn);

btn_Left = location_Of_Btn[0];
btn_Top = location_Of_Btn[1];
btn_Right = btn_Left + btn.getWidth();
btn_Bottom = btn_Top + btn.getHeight();
 
0 0
مررررررررررررررررررررررررررررررررسی ، بالاخره درست شد ، ایول داری (9 سال پیش)
0 0
فقط ببخشید من یه چیزی رو متوجه نشدم ، وقتی میخوایم از getLocationScreen استفاده کنیم ازمون یک ارایه میخواد با 2 تا خونه ، اگه تعداد خونه ها بیشتر از دوتا باشن ارور میده ، در صورتی که ما اندازه رو نسبت به بالا،پایین ، چپ و راست میخوایم.پس چرا فقط ارایه ی دوتایی میگیره (9 سال پیش)
+1 0
ما سایز آرایه تعیین نکردیم ، ولی متد getLocatoionOnScreen یه آرایه با سایز 2 درست میکنه و میریزه در پارامترش . اندیس اول left رو میده و اندیس دوم top رو میده . برای Right و bottom همین مقادیر رو با سایز ویو جمع میکنی ، کد اصلاح شد . (9 سال پیش)
+1 0
تا اونجا که من میدونم getLocationOnScreen مقدار x و y شی رو از روی صفحه میده ( اگه x و y هردو صفر باشن موقعیت میشه گوشی سمت چپ بالا ) حالا شما میخواید بفهمید ایم ویو شما چقدر از چهار طرف فاصله داره نیازی به getLocationOnScreen ندارید با getLeft و getRight و getBootom و getTop میتونید بگیرید چرا لقمه رو دور سرتون میچرخونید! (9 سال پیش)
+1 0
این getLocationOnScreen در حالت کلی هست و شاید اینجا برای آقای kazemian جواب بده ( چون لایه پدر اندازه کل صفحه است ) ولی اگه view داخل یه لایه کوچکتر از صفحه باشه مقادیر درست نمیده . بلکه نسبت به لایه پدرش میده . ایشون هم گفتن نسبت به کل صفحه میخوان . برای کل صفحه getLocationOnScreen بهتره ، چون نیاز نیست پدر و پدر جدش در نظر گرفته بشه . (9 سال پیش)
0 0
ببخشید برای به دست آوردن فاصله ی سمت راستش باید جمع کنیم یا کم کنیم؟مگه نباید اندازه ی کل عرض صفحه رو از جمع ویو و سمت چپ کم کنیم تا سمت راست به دست بیاد؟البته شما استاد تری من فقط نظرمو گفتم (9 سال پیش)
+1 0
خب اگه میخوای فاصله سمت راست رو نسبت به راست صفحه حساب کنی همین کارو بکن . اینی که من نوشتم ، سمت راست و چپ رو نسبت به چپ حساب میکنه و بالا و پایین رو نسبت به بالا حساب میکنه . (9 سال پیش)
0 0
اهاان الان متوجه شدم ، دست گلت درد نکنه (9 سال پیش)
0 0
الان این موقعیت هایی رو که گرفتم بخوام به یک ویوی دیگه اختصاص بدم باید چیکار کنم؟چطوری با کد میتونم بهش بگم توی این مختصات قرار بگیر؟ (9 سال پیش)
+1 0
با setLeft و setTop . البته مطمئن نیستم ، امتحان کن . همین دو تا بدی درسته . نیاز نیست bottom و Right بدی . (9 سال پیش)
+1 0
من که بالاخره نفهمیدم چیکار میخوای بکنی ولی اینجوری میشه برلی ویود دیگه ست کرد ‌newView.setX(oldView.getX) newView.setY(oldView.getY) (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .