PDA

View Full Version : تعیین محل قرار گیری edittext



afi_program
جمعه 20 بهمن 1396, 20:07 عصر
سلام.
من یه سری edittext دارم و یه سری هم در حین اجرا با کلیک کاربر اضافه میشن. حالا میخوام اونایی که جدید اضافه میشن برن در ادامه قبلیا (زیرشون) یه حالت لیست مانند درست بشه. تمام این edittext ها هم توی یه nestedscrollview هستن که توش یدونه linear lay out و توش یه constriant layout هست.
میتونم اضافه کنم ولی جاشون نمیتونم مشخص کنم.

ممنون میشم کمک کنید.

باتشکر

iman0111
یک شنبه 22 بهمن 1396, 07:23 صبح
سلام شاید از آرایه بتونید استفاده کنید و کمکتون کنه

afi_program
یک شنبه 22 بهمن 1396, 13:38 عصر
سلام.
آرایه؟!!! چه کمکی بهم میکنه؟ چجوری؟
من مشکلم اینه که edittext هایی که میسازم نمیتونم محل قرارگیریشون توی صفحه نمایش را تعیین کنم.

بازم ممنون

Nevercom
یک شنبه 22 بهمن 1396, 21:05 عصر
در کل شما با LayoutParams مشخصات ویو جدیدتون و محل قرارگیریش رو مشخص می کنید.

چون می‌خواید ویو ها زیر هم قرار بگیرن، ساده ترین راه حل اینه که ویو های جدید رو تو LinearLayout تزریق کنید. می تونید ویو جدید رو با استفاده از کلاسش بسازید و باز با LayoutParams طول و عرضش رو مشخص کنید یا اینکه یه Layout آماده داشته باشید (مثلن فقط یه EditText) و اون رو Inflate کنید و به ویو والد تزریق کنید.

afi_program
یک شنبه 22 بهمن 1396, 23:43 عصر
ممنون.
امکانش هست نمونه کد مثال با توضیح برام بذارید؟
چون با layoutparams نتونستم کار کنم. اومدم با constraintset کار کنم چون توی constraintlayout بودم ولی درست جواب نمیده.
اینکه توی یه linearlayout یدونه constraint layout دارم کار درستیه؟

ممنون

rubiks.kde
دوشنبه 23 بهمن 1396, 09:18 صبح
شما به صورت داینامیک می تونید به view آیتم جدید اضافه کنید مثل این نمونه مثال :

View linearLayout = findViewById(R.id.info);//LinearLayout layout = (LinearLayout) findViewById(R.id.info);
TextView valueTV =newTextView(this);
valueTV.setText("hallo hallo");
valueTV.setId(5);
valueTV.setLayoutParams(newLayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));

((LinearLayout) linearLayout).addView(valueTV);

afi_program
دوشنبه 23 بهمن 1396, 09:59 صبح
شما به صورت داینامیک می تونید به view آیتم جدید اضافه کنید مثل این نمونه مثال :

View linearLayout = findViewById(R.id.info);//LinearLayout layout = (LinearLayout) findViewById(R.id.info);
TextView valueTV =newTextView(this);
valueTV.setText("hallo hallo");
valueTV.setId(5);
valueTV.setLayoutParams(newLayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));

((LinearLayout) linearLayout).addView(valueTV);


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

و کدی که به هنگام زدن دکمه اجرا میشه(kotlin هست)


val lengthedittext=EditText(this)
val countedittext=EditText(this)
//var constraintedlayout= ConstraintLayout (this)
var constraintsettemp= ConstraintSet ()
///
lengthedittext.setMaxWidth(20)
lengthedittext.setMaxHeight(editText1.getHeight())
lengthedittext.setId(edittextconstraintlayout.chil dCount+1)
lengthedittext.setTextAlignment(View.TEXT_ALIGNMEN T_CENTER)
lengthedittext.setInputType(InputType.TYPE_NUMBER_ VARIATION_NORMAL )
lengthedittext.setSelectAllOnFocus(true)
lengthedittext.setText(lengthedittext.getId().toSt ring())
lengthedittext.setVisibility(View.VISIBLE)

///
countedittext.setMaxWidth(editText2.getWidth())
countedittext.setMaxHeight(editText2.getHeight())
countedittext.setId(edittextconstraintlayout.child Count+2)
countedittext.setTextAlignment(View.TEXT_ALIGNMENT _CENTER)
countedittext.setInputType(InputType.TYPE_CLASS_NU MBER)
countedittext.setSelectAllOnFocus(true)
countedittext.setText(countedittext.getId().toStri ng())
countedittext.setVisibility(View.VISIBLE)
////
edittextconstraintlayout.addView(lengthedittext)
NoOfEdittexts++
edittextconstraintlayout.addView(countedittext)
NoOfEdittexts++
//////////////
constraintsettemp.connect(lengthedittext.getId(),C onstraintSet.LEFT,ConstraintSet.PARENT_ID,Constrai ntSet.LEFT,26)
constraintsettemp.connect(countedittext.getId(),Co nstraintSet.LEFT,lengthedittext.getId(),Constraint Set.RIGHT,26)
// constraintsettemp.connect(lengthedittext.getId(),C onstraintSet.TOP,NoOfEdittexts-3,ConstraintSet.BOTTOM,26)
constraintsettemp.connect(lengthedittext.getId(),C onstraintSet.TOP,ConstraintSet.PARENT_ID,Constrain tSet.TOP,200)
constraintsettemp.connect(lengthedittext.getId(),C onstraintSet.BOTTOM,ConstraintSet.PARENT_ID,Constr aintSet.BOTTOM,20)
constraintsettemp.connect(countedittext.getId(),Co nstraintSet.RIGHT,ConstraintSet.PARENT_ID,Constrai ntSet.RIGHT,26)
// constraintsettemp.connect(countedittext.getId(),Co nstraintSet.TOP,NoOfEdittexts-2,ConstraintSet.BOTTOM,26)
constraintsettemp.connect(countedittext.getId(),Co nstraintSet.TOP,ConstraintSet.PARENT_ID,Constraint Set.TOP,200)
constraintsettemp.connect(countedittext.getId(),Co nstraintSet.BOTTOM,ConstraintSet.PARENT_ID,Constra intSet.BOTTOM,20)
//constraintsettemp.setHorizontalBias(lengthedittext .getId(),0.25F)
constraintsettemp.setHorizontalBias(countedittext. getId(),025F)constraintsettemp.applyTo(edittextcon straintlayout)

ممنون میشم اگه کسی کمک کنه

Nevercom
دوشنبه 23 بهمن 1396, 11:31 صبح
یه layout بسازید که همون دوتا EditText تو تصویر داخلش باشن. درواقع تو این فایل همون چیزی رو قرار بدید که می‌خواید تکثیرش کنید.

لایه ای که توش اینا رو اضافه می کنید، یه Linear Layout باشه (چون اشاره کردید، والد مستقیم LL باشه و نه ConstraintLayoutی که داخل LL هست)


EditText m = (EditText) getLayoutInflater().inflate(R.layout.template_edit _text, llAttribsContainer, false);

views.add(m);


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

این ساده ترین راهه، نه لزومن بهترین راه.

afi_program
دوشنبه 23 بهمن 1396, 22:06 عصر
ممنون
ولی من با Inflate مشکلی دارم و اون اینه که نمیتونم فقط همون محتوای مد نظرم تکرار بشه و کل activity مجبورم کپی کنم. و علاوه بر این اینکه اینجوری من بعدا چجوری میتونم به این edittext های ساخته شده جدید از طریق کد دسترسی داشته باشم؟

من از layoutparams استفاده کردم ولی نتونستم edittext های جدید را زیر قبلیا بندازم فقط توی همون سطر قرار گرفتن. کدی که استفاده کردم میذارم ممنون میشم راهنمایی کنید (تنها مشکل این کد در کل کار برای من اینه که دقیقا روی همون قبلیا نشون میده)

با تشکر


val lengthedittext=EditText(this)
val countedittext=EditText(this)
al params1 =editText1.getLayoutParams() as ConstraintLayout.LayoutParams
val params2=editText2.getLayoutParams()as ConstraintLayout.LayoutParams
var newParams1 = ConstraintLayout.LayoutParams(ConstraintLayout.Lay outParams.WRAP_CONTENT,ConstraintLayout.LayoutPara ms.WRAP_CONTENT)
var newParams2=ConstraintLayout.LayoutParams(Constrain tLayout.LayoutParams.WRAP_CONTENT,ConstraintLayout .LayoutParams.WRAP_CONTENT)
newParams1=params1
newParams1.topToBottom = editText1.getId()
newParams2=params2newParams2.topToBottom=editText2 .getId()
edittextconstraintlayout.addView(lengthedittext,-1,newParams1)
edittextconstraintlayout.addView(countedittext,1,n ewParams2)