رفتن به مطلب
  • 0

آشکار و پنهان کردن یک لایوت ( پاپ آپ باکس)


arioman

سوال

با سلام و خسته نباشید من میخوام یه کادر شبیه به مسیج باکس رو که خودم با لایوت طراحی کردم با زدن دکمه ای باز بشه و با زدن دکمه بستن که روی اون لایوت هست بسته بشه

کاری که کردم قرار دادن یه پنل در اکتیویتی و false کردن visible اون و لود لایوت مورد نظر داخلش بود و وقتی روی دکمه کلیک شه مقدار visible اون پنل رو True کردم کدی شبیه به زیر :

 

Dim Attentionpanel As Panel

Sub Activity_Create(FirstTime As Boolean)
		
	Activity.LoadLayout("main")

	Attentionpanel.Initialize("")
	Activity.AddView(Attentionpanel,0,0,100%x,100%y)
	Attentionpanel.LoadLayout("internetbox")
	Attentionpanel.Visible = False

End Sub


Sub showpopup_Click
	Attentionpanel.Visible = True
End Sub

Sub hideback_Click
	Attentionpanel.Visible = False
End Sub

این کد روی گوشی سامسونگ ک اندروید ۶ هستش به خوبی کار میکنه ظاهرا ،‌ ولی وقتی روی گوشی سونی ک اندروید ۴ هست تست میکنم لایوت internetbox ( پاپ اپ ) زیر لایوت و المان های لایوت اصلی لود میشه !


6f0_photo_2016-12-28w3-21.jpg

 

مشکل از کجاست ؟!  یکسری دوستان هم میگن لایوت رو در event مربوط به باتن لود کنم و سپس برای مخفی کردنش از removeview استفاده کنم اما وقتی دوبار پاپ اپ رو ظاهر و مخفی میکنم با این روش دفعه دوم پیام اخطاری میده مبنی بر اینکه you must remove child first  !

لینک ارسال
به اشتراک گذاری در سایت های دیگر

11 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

تو activitycreat  این رو اضافه کن 

Attentionpanel.BringToFront

این کار باعث میشه پنل بیاد روی همه ویوهای دیگه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون جناب شاهپیری به نظر میرسه خیلی اوقات یک تنه مشکل کاربران رو حل میکنید و واقعا وجود شما برای ما برکت هستش


من دو روزه درگیر این قضیه هستم و انواع روش ها رو تست کردم بدیهیست که فقط این مدل از گوشیه که این مشکل رو داره ( اندروید 5.1.1 ساینوژن )

و یک چیز عجیب دیگه متوجه شدم این باگ فقط در مورد Button وجود داره به عنوان مثال من یکسری ویو دیگه مثل پنل و Imageview و اسکرول اضافه کردن به لایوت main و همه اونها بدون نیاز به استفاده از کدهای اضافی

مثل

Attentionpanel.BringToFront

در زیر کادر پاپ آپ لود میشن در حالی که به هیچ وجه باتن ها رو حتی با دستور button1.sendtoback هم نتونستم به زیر این لایوت بکشم


و این مشکل روی دو گوشی دیگه که در دسترس دارم اتفاق نمی افته ؛ بهرحال خیلی دوس داشتم به نحوی این مشکل روی این گوشی و نسخه اندروید هم وجود نداشته باشه با اینکه شاید تعداد کمی از یوزر ها این نسخه از کاستوم رام اندروید رو داشته باشن ؛ متاسفانه Erel هم پاسخ کامنت ها و تاپیک های بدون لایسنس رو نمیده و نمیشه این باگ رو ثبتش کرد یا راه حلی براش از اون پرسید

یه سوال دیگه هم داشتم اینکه باز کردن دو لایوت در یک اکتیویتی اصلا کار استانداردی هستش یا بهتره اون قسمت پاپ باکس هم در همون لایوت اصلی قرار بگیره و پنهان و اشکار بشه ؟!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون و درود. انجام وظیفه اس عزیز

ببینید در حالت کلی و منطقی لود کردن دو لیوت و یا حتی چند لیوت در اندروید در صورتی که بهینه و درست و منطقی باشه هیچ مشکلی ایجاد نمیکنه.

توی جاوا با کلاسهای layoutinflater و popupwindo به راحتی میتونید یه لیوت رو بدون اینکه مشکلی ایجاد کنه لود کنید. این کار در بیسیک هم امکان پذیره شما با کتابخونه dialogs به راحتی میتونید بدون اینکه ویوی اضافی رو اد کنید و حالا هی اونو مخفی کنید و دوباره نشون بدید مثل جاوا لایه های خودتون رو لود کنید مثالش به شکل زیره اول کتابخونه رو تیک بزنید

Dim CustomDialog As CustomDialog
	Dim Panel1 As Panel
	Panel1.Initialize("")
	CustomDialog.AddView(Panel1,0,0,85%x,330)
	Panel1.LoadLayout("yourlayout")
	CustomDialog.Show("positivetitle","dialogtitletitle","","","icon")

میبینید که به راحتی تونستید که یه پنل رو بدون اینکه اونو توی لایوت اصلی اد کرده باشین توی اکتیویتی نمایش بدین 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱ ساعت قبل، محمدرضا شاهپیری گفته است :

ممنون و درود. انجام وظیفه اس عزیز

ببینید در حالت کلی و منطقی لود کردن دو لیوت و یا حتی چند لیوت در اندروید در صورتی که بهینه و درست و منطقی باشه هیچ مشکلی ایجاد نمیکنه.

توی جاوا با کلاسهای layoutinflater و popupwindo به راحتی میتونید یه لیوت رو بدون اینکه مشکلی ایجاد کنه لود کنید. این کار در بیسیک هم امکان پذیره شما با کتابخونه dialogs به راحتی میتونید بدون اینکه ویوی اضافی رو اد کنید و حالا هی اونو مخفی کنید و دوباره نشون بدید مثل جاوا لایه های خودتون رو لود کنید مثالش به شکل زیره اول کتابخونه رو تیک بزنید


Dim CustomDialog As CustomDialog
	Dim Panel1 As Panel
	Panel1.Initialize("")
	CustomDialog.AddView(Panel1,0,0,85%x,330)
	Panel1.LoadLayout("yourlayout")
	CustomDialog.Show("positivetitle","dialogtitletitle","","","icon")

میبینید که به راحتی تونستید که یه پنل رو بدون اینکه اونو توی لایوت اصلی اد کرده باشین توی اکتیویتی نمایش بدین 

سلام آقای شاهپیری برای اینکه با کلیک کردن خارج از دیالوگ دیالوگ بسته بشه راهی براش هست؟

در در 1395/10/08, 14:16:50، arioman گفته است :

با سلام و خسته نباشید من میخوام یه کادر شبیه به مسیج باکس رو که خودم با لایوت طراحی کردم با زدن دکمه ای باز بشه و با زدن دکمه بستن که روی اون لایوت هست بسته بشه

کاری که کردم قرار دادن یه پنل در اکتیویتی و false کردن visible اون و لود لایوت مورد نظر داخلش بود و وقتی روی دکمه کلیک شه مقدار visible اون پنل رو True کردم کدی شبیه به زیر :

 


Dim Attentionpanel As Panel

Sub Activity_Create(FirstTime As Boolean)
		
	Activity.LoadLayout("main")

	Attentionpanel.Initialize("")
	Activity.AddView(Attentionpanel,0,0,100%x,100%y)
	Attentionpanel.LoadLayout("internetbox")
	Attentionpanel.Visible = False

End Sub


Sub showpopup_Click
	Attentionpanel.Visible = True
End Sub

Sub hideback_Click
	Attentionpanel.Visible = False
End Sub

این کد روی گوشی سامسونگ ک اندروید ۶ هستش به خوبی کار میکنه ظاهرا ،‌ ولی وقتی روی گوشی سونی ک اندروید ۴ هست تست میکنم لایوت internetbox ( پاپ اپ ) زیر لایوت و المان های لایوت اصلی لود میشه !


6f0_photo_2016-12-28w3-21.jpg

 

مشکل از کجاست ؟!  یکسری دوستان هم میگن لایوت رو در event مربوط به باتن لود کنم و سپس برای مخفی کردنش از removeview استفاده کنم اما وقتی دوبار پاپ اپ رو ظاهر و مخفی میکنم با این روش دفعه دوم پیام اخطاری میده مبنی بر اینکه you must remove child first  !

راه دیگه ای برای این کار اینه که کلا دیالوگتونو توی یک اکتویتی مستقل بزنید و رنگ اکتویتی رو ترنسپرنت کنید و.....

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 49 دقیقه قبل، iavaduu گفته است :

سلام آقای شاهپیری برای اینکه با کلیک کردن خارج از دیالوگ دیالوگ بسته بشه راهی براش هست؟ خودش به صورت پیشفرض همینجوریه دیگه:fekr:

راه دیگه ای برای این کار اینه که کلا دیالوگتونو توی یک اکتویتی مستقل بزنید و رنگ اکتویتی رو ترنسپرنت کنید و..... خیر اونوقت از برنامه میاین بیرون عزیز:malih:

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، محمدرضا شاهپیری گفته است :

ممنون و درود. انجام وظیفه اس عزیز

ببینید در حالت کلی و منطقی لود کردن دو لیوت و یا حتی چند لیوت در اندروید در صورتی که بهینه و درست و منطقی باشه هیچ مشکلی ایجاد نمیکنه.

توی جاوا با کلاسهای layoutinflater و popupwindo به راحتی میتونید یه لیوت رو بدون اینکه مشکلی ایجاد کنه لود کنید. این کار در بیسیک هم امکان پذیره شما با کتابخونه dialogs به راحتی میتونید بدون اینکه ویوی اضافی رو اد کنید و حالا هی اونو مخفی کنید و دوباره نشون بدید مثل جاوا لایه های خودتون رو لود کنید مثالش به شکل زیره اول کتابخونه رو تیک بزنید


Dim CustomDialog As CustomDialog
	Dim Panel1 As Panel
	Panel1.Initialize("")
	CustomDialog.AddView(Panel1,0,0,85%x,330)
	Panel1.LoadLayout("yourlayout")
	CustomDialog.Show("positivetitle","dialogtitletitle","","","icon")

میبینید که به راحتی تونستید که یه پنل رو بدون اینکه اونو توی لایوت اصلی اد کرده باشین توی اکتیویتی نمایش بدین 

ممنون خیلی جالبه حتما تستش میکنم شاید این مشکل روی گوشی سونی هم حل شد اصن

فقط یه چیزی این کتابخانه استاندارده از همه لحاظ ؟ منظورم اینه که بالا رفتن تعداد این کتابخانه و استفاده این مدلی ازش سرعت و کارکرد برنامه و کد ها رو تاثیری نمیذاره ؟!

و یه چیز دیگه که این پنل به عنوان چارچوب اصلی لود میشه که من طراحی کردم یا این پنل داخل کادر مستطیل چارچوب خوده دیالوگ باکس قرار میگیره ؟ منظورم اینه که پنلی ک لود میکنم به عنوان قسمتی از دیالوگ لود میشه یا کلا میتونم همون پنل رو فقط لود کنم و اصلا کسی متوجه نشه این دیالوگ باکسه ؟!

برای مثال دکمه های تایید یا کنسل رو بصورت دستی میتونم در پنل خودم طراحی و بزارم و دیالوگ باکس فقط لود کننده مخفی اون باشه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 ساعت قبل، arioman گفته است :

ممنون خیلی جالبه حتما تستش میکنم شاید این مشکل روی گوشی سونی هم حل شد اصن

فقط یه چیزی این کتابخانه استاندارده از همه لحاظ ؟ منظورم اینه که بالا رفتن تعداد این کتابخانه و استفاده این مدلی ازش سرعت و کارکرد برنامه و کد ها رو تاثیری نمیذاره ؟! بله کاملا استاندارده هر تعداد بزارین مشکلی ایجاد نمیکنه

و یه چیز دیگه که این پنل به عنوان چارچوب اصلی لود میشه که من طراحی کردم یا این پنل داخل کادر مستطیل چارچوب خوده دیالوگ باکس قرار میگیره ؟ منظورم اینه که پنلی ک لود میکنم به عنوان قسمتی از دیالوگ لود میشه یا کلا میتونم همون پنل رو فقط لود کنم و اصلا کسی متوجه نشه این دیالوگ باکسه ؟! بله میتونین کاری کنین که اصلا مشخص نشه و فقط همون لابه رو نشون بده فقط کافیه به شکل زیر نشونش بدین


CustomDialog1.Show("","","","",Null)



برای مثال دکمه های تایید یا کنسل رو بصورت دستی میتونم در پنل خودم طراحی و بزارم و دیالوگ باکس فقط لود کننده مخفی اون باشه؟ خیر متاسفانه این گزینه رو نداره:malih: باید اضافه کنم بش بزارم فروشگاه:malih::girl_pardon:

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 8 ساعت قبل، محمدرضا شاهپیری گفته است :

 

والا روی گوشی من که خارج از دیالوگ کلیک میکنم دیالوگ بسته نمیشه! میخواید ویدیو هم بفرستم.

راستی هرکاری میکنم نمیتونم لایوت رو با کاستوم دیالوگ fitکنم!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 11 ساعت قبل، محمدرضا شاهپیری گفته است :

راه دیگه ای برای این کار اینه که کلا دیالوگتونو توی یک اکتویتی مستقل بزنید و رنگ اکتویتی رو ترنسپرنت کنید و..... خیر اونوقت از برنامه میاین بیرون عزیز:malih:

  اگه اکتویتی قبلی بسته نشه هرگز ازبرنامه نمیاد بیرون درضمن چون رنگ اکتویتی جهت دیالوگ ترنسپرنت هست پشت(اطراف)دیالوگ شفاف هست واکتیوتی قبلی قابل نمایش هست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در مرحله اول باید بگم با روش کاستوم دیالوگ حتی روی رام کاستوم سیانوژن 12 هم که باگ لود شدن باتون روی کادر پاپ اپ رو داشت مشکل حل شد

در مرحله دوم چند مشکل برای لود لایوت داخل کاستوم دیالوگ وجود داره :

- اگر بخواهیم کاستوم دیالوگ صد در صد طراحی کاستوم و لایوت واری داشته باشیم از اونجایی که دستوری برای بستن کاستوم دیالوگ برای مثال

CustomDialog.hide

 

وجود نداره بنابراین نمیشه لایوت صد در صد دلخواه رو طراحی و اونو با دکمه ای که خودمون طراحی و جاسازی کردیم ببندیم 


- به نظر میرسه Fit کردن لایوت دلخواده داخل کادر دیالوگ باکس کاری بسیار مشکل و پیچیده باشه چرا که از طرفی اینطور به نظر میرسه که دیالوگ باکس width مشخص و ارائه شده ای نداره همینطور ارتفاع

که این باعث میشه نشه لایوت رو دقیقا در جای مربوطه لود کرد ، ضمن اینکه وقتی تقریبی هم عدد و درصد میدی لایوت وارد شده بسیار کوچکتر از چیزی که در واقعیت تعریف شده لود میشه حتی اگر در نظر بگیریم که Parent ما کاستوم باکس هست بازم با ابعادی ک با درصد مشخص کردم نمیخونه

در 1 ساعت قبل، iavaduu گفته است :

  اگه اکتویتی قبلی بسته نشه هرگز ازبرنامه نمیاد بیرون درضمن چون رنگ اکتویتی جهت دیالوگ ترنسپرنت هست پشت(اطراف)دیالوگ شفاف هست واکتیوتی قبلی قابل نمایش هست

اینطور که من در تالارهای b4a خوندم اکثر کاربران توصیه میکنن استفاده از اکتیویتی برای پیج های مرجع و اصلی باشه و تعداد اکتیویتی ها تا حد امکان و اونجایی که نیاز نیس بالا نره

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 16 دقیقه قبل، arioman گفته است :

اینطور که من در تالارهای b4a خوندم اکثر کاربران توصیه میکنن استفاده از اکتیویتی برای پیج های مرجع و اصلی باشه و تعداد اکتیویتی ها تا حد امکان و اونجایی که نیاز نیس بالا نره

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

خب شمافقط کافیه مقدار هارو به اکتویتی مورد نظر ارسال کنید ونیازی نیست که برای هردیالوگ یک اکتویتی جدید بسازید.مگر اینکه بخواید قالب هرکدومو عوض کنید!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...