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

مشکل در تنظیم ارتفاع اسکرول ویو


Salar82

سوال

سلام به همه دوستان

من با کد زیر میام تو رویداد HeightChanged کتابخونه IME، با باز و بسته شدن کیبورد، ارتفاع اسکرول ویو رو با کد زیر تغییر میدم. اما مشکل اینه که ارتفاع اسکرول ویو تغییر نمیکنه:

Private Sub IME_HeightChanged (NewHeight As Int, OldHeight As Int)
	If NewHeight - OldHeight < 0 Then ' Open
		Dim height As Int = SVR.Panel.Height + NewHeight
		SVR.Panel.Height = height
	Else
		SVR.Panel.Height = Activity.Height
	End If
End Sub

 

ممنون از راهنماییتون

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

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

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

در ۱ ساعت قبل، trzm1989 گفته است :

من اینجوری یبار این کارو انجام دادم برای ساخت صفحه چت

 


کد مانیفست:

SetActivityAttribute(act_Messages, android:windowSoftInputMode, adjustResize|stateHidden)

 

LV هم با ریسایکلرویو

 


	IME.Initialize("IME")
	IME.AddHeightChangedEvent
		
	Height = 100%y-56dip-10.5%y
		
	LV.Initializer("LV").ListView.StackFromEnd.Build
	LV.Ripple.Alpha(0).Color(Colors.Transparent)
	LV.Clickable = False
	Activity.AddView(LV,0,56dip,100%x,Height)



	Pan.Initialize("")
	Activity.AddView(Pan,0,90%y,100%x,10%y)
	Pan.Color = 0xFFFAFAFA
		
	lblPM.Initialize("lblPM")
	Dim CD As ColorDrawable
	CD.Initialize(0xFFFAFAFA,1dip)
	lblPM.Background = CD
	lblPM.Hint = "پیام خود را بنویسید"
	lblPM.TextSize = 12
	lblPM.Typeface = IranSans
	Pan.AddView(lblPM,5%x,1%y,82%x,8%y)
	
	sendBTN.Initialize("sendBTN")
	sendBTN.Bitmap = LoadBitmap(File.DirAssets,"send.png")
	sendBTN.Gravity = Gravity.FILL
	Pan.AddView(sendBTN,89%x,(10%y-7%x)/2,7%x,7%x)

 


Sub IME_HeightChanged(NewHeight As Int, OldHeight As Int)
	Pan.Top = NewHeight - Pan.Height
	LV.Height = NewHeight - 56dip-10%y
End Sub

 

مشکل حل شد

 

برای اینکار لازم نیست InnerHeight رو تغییر بدیم و فقط باید ارتفاع خود اسکرول ویو رو تغییر داد و لازم هم نیست که بعد از تغییر ارتفاع ویو، دستی به InnerHeight بزنیم چون وقتی InnerHeight رو برابر 750dip میذاریم، چه ارتفاع %50 باشه و چه %100 ، InnerHeight همون 750dip میمونه و فرقی به حالش نداره.

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

بابت کمک در حل این مشکل از @ محمدرضا شاهپیری و @ trzm1989 بسیار متشکرم

 

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

شما نیاز نیست دستی چیزی رو تغییر بدین. کافیه خاصیت android:windowSoftInputMode="adjustResize" رو برای اکتیویتیتون ست کنید. اتوماتیک هروقت کیبورد باز بشه ادیت تکست هم بالا میاد و زیر کیبورد نمیره

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

 

تشکر

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

قاعدتا باید وقتی کیبورد باز شد، ارتفاع به SVR.Panel.Height + NewHeight تغییر پیدا کنه.

اما

چیزی که الان متوجه شدم اینه که: وقتی کیبورد باز میشه اتفاقی نمیفته و وقتی بسته میشه، تازه کدهای مربوط به باز شدن عمل میکنه و ارتفاع رو به SVR.Panel.Height + NewHeight تغییر میده.

وقتی هم برای سری دوم کیبورد باز میشه، کدهای مربوط بسته شدن کیبورد عمل میکنه.

 

اصلا نمیتونم درکش کنم؛ رفته رو اعصابم :mocking:

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

من اینجوری یبار این کارو انجام دادم برای ساخت صفحه چت

 

کد مانیفست:

SetActivityAttribute(act_Messages, android:windowSoftInputMode, adjustResize|stateHidden)

 

LV هم با ریسایکلرویو

 

	IME.Initialize("IME")
	IME.AddHeightChangedEvent
		
	Height = 100%y-56dip-10.5%y
		
	LV.Initializer("LV").ListView.StackFromEnd.Build
	LV.Ripple.Alpha(0).Color(Colors.Transparent)
	LV.Clickable = False
	Activity.AddView(LV,0,56dip,100%x,Height)



	Pan.Initialize("")
	Activity.AddView(Pan,0,90%y,100%x,10%y)
	Pan.Color = 0xFFFAFAFA
		
	lblPM.Initialize("lblPM")
	Dim CD As ColorDrawable
	CD.Initialize(0xFFFAFAFA,1dip)
	lblPM.Background = CD
	lblPM.Hint = "پیام خود را بنویسید"
	lblPM.TextSize = 12
	lblPM.Typeface = IranSans
	Pan.AddView(lblPM,5%x,1%y,82%x,8%y)
	
	sendBTN.Initialize("sendBTN")
	sendBTN.Bitmap = LoadBitmap(File.DirAssets,"send.png")
	sendBTN.Gravity = Gravity.FILL
	Pan.AddView(sendBTN,89%x,(10%y-7%x)/2,7%x,7%x)

 

Sub IME_HeightChanged(NewHeight As Int, OldHeight As Int)
	Pan.Top = NewHeight - Pan.Height
	LV.Height = NewHeight - 56dip-10%y
End Sub

 

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

ممنون بابت پاسخگوییتون

ولی من میخوام کل صفحه اسکرول بشه نه اینکه تاپ یک ویو رو تغییر بدم و الان مشکلم با خود اسکرول ویو هست که ارتفاعش اشتباه تنظیم میشه.

کد شما کاملا درسته و هیچ مشکلی نداره

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

در 3 ساعت قبل، Salar82 گفته است :

سلام به همه دوستان

من با کد زیر میام تو رویداد HeightChanged کتابخونه IME، با باز و بسته شدن کیبورد، ارتفاع اسکرول ویو رو با کد زیر تغییر میدم. اما مشکل اینه که ارتفاع اسکرول ویو تغییر نمیکنه:


Private Sub IME_HeightChanged (NewHeight As Int, OldHeight As Int)
	If NewHeight - OldHeight < 0 Then ' Open
		Dim height As Int = SVR.Panel.Height + NewHeight
		SVR.Panel.Height = height
	Else
		SVR.Panel.Height = Activity.Height
	End If
End Sub

 

ممنون از راهنماییتون

قصدتون دقیقا چیه دوست عزیز؟چرا همچین کاری میخواین بکنین؟

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

می خوام ادیت تکست ها زیر کیبورد نباشن و

نمیخوام هم که پوزیشن هر کدوم رو تغییر بدم چون هم تعداد تکست ویو ها زیاده و هم یه دکمه پایین صفحه هست که میخوام با باز شدن کیبورد، اون هم پیدا باشه

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

در 3 دقیقه قبل، Salar82 گفته است :

می خوام ادیت تکست ها زیر کیبورد نباشن و

نمیخوام هم که پوزیشن هر کدوم رو تغییر بدم چون هم تعداد تکست ویو ها زیاده و هم یه دکمه پایین صفحه هست که میخوام با باز شدن کیبورد، اون هم پیدا باشه

خب همینطوره برام استاد تمام ویوهام توی پنله ولی

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

در 15 دقیقه قبل، trzm1989 گفته است :

خب همینطوره برام استاد تمام ویوهام توی پنله ولی

درسته

ولی شما اومدین ارتفاع ریسایکلر رو کم کردین.

حالا اگر من بیام ارتفاع ویو(اسکرول ویو) رو کمتر کنم، مجبور میشم InnerHeight رو افزایش بدم که باز میشه همین آش و همین کاسه و بازم تغییر نمیکنه.

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

در 38 دقیقه قبل، Salar82 گفته است :

می خوام ادیت تکست ها زیر کیبورد نباشن و

نمیخوام هم که پوزیشن هر کدوم رو تغییر بدم چون هم تعداد تکست ویو ها زیاده و هم یه دکمه پایین صفحه هست که میخوام با باز شدن کیبورد، اون هم پیدا باشه

شما نیاز نیست دستی چیزی رو تغییر بدین. کافیه خاصیت android:windowSoftInputMode="adjustResize" رو برای اکتیویتیتون ست کنید. اتوماتیک هروقت کیبورد باز بشه ادیت تکست هم بالا میاد و زیر کیبورد نمیره

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

در در 24 خرداد 1399 در 17:27، Salar82 گفته است :

سلام به همه دوستان

من با کد زیر میام تو رویداد HeightChanged کتابخونه IME، با باز و بسته شدن کیبورد، ارتفاع اسکرول ویو رو با کد زیر تغییر میدم. اما مشکل اینه که ارتفاع اسکرول ویو تغییر نمیکنه:


Private Sub IME_HeightChanged (NewHeight As Int, OldHeight As Int)
	If NewHeight - OldHeight < 0 Then ' Open
		Dim height As Int = SVR.Panel.Height + NewHeight
		SVR.Panel.Height = height
	Else
		SVR.Panel.Height = Activity.Height
	End If
End Sub

 

ممنون از راهنماییتون

سلام.

دوست عزیزم اتفاقا اینکار خیلی آسونیه و من بارها ازش اسفاده کردم.

در منیفست:

SetActivityAttribute(main, android:windowSoftInputMode, adjustResize|stateHidden)

در Activity_Create:

	ime1.Initialize("ime1")
	ime1.AddHeightChangedEvent

ایجاد ساب و تغییر ارتفاع خودکار :

Sub ime1_HeightChanged(NewHeight As Int, OldHeight As Int)
	ScrollView1.Height = NewHeight
End Sub

در Activity_Pause (اگر خواستی اجباری نیست )

ime1.HideKeyboard

اینم برای بازکردن کیبورد: که هرجایی که بخوای میذاریش، مثلا در Activity_Create: (خط زیر برای فعال شدن تکست هست، که خودکار باز شه)

Sub txtSearch_FocusChanged (HasFocus As Boolean)
	If HasFocus = True Then
		ime1.ShowKeyboard(txtSearch)
	End If
End Sub

اصلا دیگه به هیچ چیزی نمیخواد دست بزنی که بهم بریزه.

فقط اگر احیانا خواستی فیلتری برای تکست تعیین کنی و یا طول کاراکتر رو محدود کنی دو خط زیر :

ime1.SetCustomFilter(txtSearch, txtSearch.INPUT_TYPE_NUMBERS, "0123456789.")
ime1.SetLengthFilter(txtSearch , 10)

ایشاله که جوابم بهترین باشه و به کارتون بیاد.

خداقوت

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

بایگانی شده

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

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

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