انجمن سایت کلیدستان



تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندرویدزمان کنونی: ۱۳۹۵/۰۹/۲۰، ۰۱:۴۵ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: admin
آخرین ارسال: saeid2014
پاسخ 8
بازدید 4046

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#1
سلام.
یکی از دوستان، عکس زیر رو فرستاده بودند و پرسیده اند که چگونه باید مثل عکس زیر، رنگ بندی های مختلف برای هر item از ListView تعیین کنیم :

   

ما قبلا ساخت ListView سفارشی را در کلید زیر شرح داده ایم :

کلید شماره 843

اکنون تنها موردی که باید تغییر داده شود، نحوه تعیین رنگ بندی پس زمینه هر item است. فرض کنید که قصد داریم تعداد 8 رنگ را تعیین کنیم، یعنی item های از شماره 1 تا 8 (شمارش معمولی، نه اشاره به item ها)، با آن 8 رنگ نمایش داد شوند و از item شماره 9 دوباره رنگ ها تکرار شوند.
بنابراین یک لیست می سازیم و کد رنگ مربوط به آن 8 رنگ را در آن ذخیره می کنیم، یعنی آرایه ای از جنس رشته (String) که کد رنگ ها در 8 عنصر آن ذخیره شده است. نام آن را برابر myColors  در نظر می گیریم.
در Activity که ListView را نمایش داده ایم، یک متغیر را به صورت public تعریف می کنیم و مقدار اولیه آن را هم برابر 0 در نظر می گیریم. فرض کنید نام متغیر را برابر myNumber در نظر گرفته ایم. 
در میان کدهای مربوط به ساخت هر item از ListView (منظورم همان قسمتی است که معمولا می گوییم که در ImageView ها و TextView ها و سایر عناصر موجود در هر item ، چه منابعی (مقادیری) نمایش داده شوند)، بر اساس عدد ذخیره شده در myNumber  ، یک رنگ را از آرایه myColors  فراخوانی کرده و رنگ پس زمینه item را مطابق آن تعیین می کنیم (در واقع، متغیر myNumber  ، شماره عنصری از آرایه که باید فراخوانی شود را به ما می دهد، همچنین دقت کنید که شماره عنصر ها، از عدد 0 شوع می شود، نه از عدد 1). بعد از تغییر رنگ پس زمینه item ، مقدار myNumber  را یک واحد افزایش می دهیم (برای مرحله بعدی)، اما دقت کنید که باید یک شرط بگذاریم که اگر مقدار قبلی آن برابر عدد 7 بوده، دیگر تبدیل به 8 نشود، بلکه باید دوباره مقدار 0 در آن قرار داده شود، زیرا تنها 8 رنگ را در آرایه داریم (این شرط گذاری، با if انجام می شود).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط mkhv1378 ، s.saeid

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#2
(۱۳۹۳/۰۸/۲۱, ۱۱:۳۶ ق.ظ)'admin' نوشته: سلام.
یکی از دوستان، عکس زیر رو فرستاده بودند و پرسیده اند که چگونه باید مثل عکس زیر، رنگ بندی های مختلف برای هر item از ListView تعیین کنیم :

 

ما قبلا ساخت ListView سفارشی را در کلید زیر شرح داده ایم :

کلید شماره 843

اکنون تنها موردی که باید تغییر داده شود، نحوه تعیین رنگ بندی پس زمینه هر item است. فرض کنید که قصد داریم تعداد 8 رنگ را تعیین کنیم، یعنی item های از شماره 1 تا 8 (شمارش معمولی، نه اشاره به item ها)، با آن 8 رنگ نمایش داد شوند و از item شماره 9 دوباره رنگ ها تکرار شوند.
بنابراین یک لیست می سازیم و کد رنگ مربوط به آن 8 رنگ را در آن ذخیره می کنیم، یعنی آرایه ای از جنس رشته (String) که کد رنگ ها در 8 عنصر آن ذخیره شده است. نام آن را برابر myColors  در نظر می گیریم.
در Activity که ListView را نمایش داده ایم، یک متغیر را به صورت public تعریف می کنیم و مقدار اولیه آن را هم برابر 0 در نظر می گیریم. فرض کنید نام متغیر را برابر myNumber در نظر گرفته ایم. 
در میان کدهای مربوط به ساخت هر item از ListView (منظورم همان قسمتی است که معمولا می گوییم که در ImageView ها و TextView ها و سایر عناصر موجود در هر item ، چه منابعی (مقادیری) نمایش داده شوند)، بر اساس عدد ذخیره شده در myNumber  ، یک رنگ را از آرایه myColors  فراخوانی کرده و رنگ پس زمینه item را مطابق آن تعیین می کنیم (در واقع، متغیر myNumber  ، شماره عنصری از آرایه که باید فراخوانی شود را به ما می دهد، همچنین دقت کنید که شماره عنصر ها، از عدد 0 شوع می شود، نه از عدد 1). بعد از تغییر رنگ پس زمینه item ، مقدار myNumber  را یک واحد افزایش می دهیم (برای مرحله بعدی)، اما دقت کنید که باید یک شرط بگذاریم که اگر مقدار قبلی آن برابر عدد 7 بوده، دیگر تبدیل به 8 نشود، بلکه باید دوباره مقدار 0 در آن قرار داده شود، زیرا تنها 8 رنگ را در آرایه داریم (این شرط گذاری، با if انجام می شود).


 

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

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#3
سلام.
براتون یک کلید نوشتم که در آن، هم بخش های مهم توضیح داده شده و هم یک پروژه اندروید را به صورت نمونه تغییر داده ایم :

کلید شماره 2882

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#4
(۱۳۹۳/۰۹/۰۱, ۰۶:۰۰ ب.ظ)'admin' نوشته: سلام.
براتون یک کلید نوشتم که در آن، هم بخش های مهم توضیح داده شده و هم یک پروژه اندروید را به صورت نمونه تغییر داده ایم :

کلید شماره 2882



 

سلام.. ممنون از راهنماییتون 
فقط چجوری میشه از جابجایی رنگ ها جلوگیری کرد؟ چون اسکرول ک میکنیم رنگ ها تغییر میکنه..
مثلا آیتم اولی آبی بوده.. بعد از اسکرول تغییر میکنه 

 
پاسخ
 سپاس شده توسط admin

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#5
سلام.
بله این مشکل از آنجا ناشی می شود که بخش تعیین رنگ item را در روش getView نوشته ایم.
برای رفع این مشکل :
یک آرایه با تعداد عناصر برابر تعداد item های ListView بسازید و در آن، نام 4 رنگ را به صورت تکرار شونده بنویسید (در ابتدای اجرای کدهای Activity و خارج از روش getView). اکنون در روش getView ، کدهای قبلی در مورد رنگ ها را حذف کرده و بر اساس متغیر position که شماره متناظر با item است، یک رنگ را از آن آرایه شامل نام رنگ ها می خوانید و در پس زمینه item نمایش می دهید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#6
(۱۳۹۳/۰۹/۲۶, ۰۷:۱۴ ب.ظ)'admin' نوشته: سلام.
بله این مشکل از آنجا ناشی می شود که بخش تعیین رنگ item را در روش getView نوشته ایم.
برای رفع این مشکل :
یک آرایه با تعداد عناصر برابر تعداد item های ListView بسازید و در آن، نام 4 رنگ را به صورت تکرار شونده بنویسید (در ابتدای اجرای کدهای Activity و خارج از روش getView). اکنون در روش getView ، کدهای قبلی در مورد رنگ ها را حذف کرده و بر اساس متغیر position که شماره متناظر با item است، یک رنگ را از آن آرایه شامل نام رنگ ها می خوانید و در پس زمینه item نمایش می دهید.


 

سلام. من برای تغییر رنگ بندی آیتمها از همین روش استفاده می کنم و درست کار می کنه. در برنامه من رو هر آیتمی که کلیک میشه، برنامه به یه اکتیویتی دیگه ای هدایت میشه. حالا مساله ای که هست اینه که میخوام موقع کلیک روی هر آیتم بک گراند اون آیتم رنگش عوض بشه. برای این کار از کلید شماره 2900 استفاده کردم، تقریبا درست کار می کنه ولی موقع کلیک که بک گراند آیتم عوض میشه، این بک گراند روی آیتم قرار میگیره و در نتیجه نوشته آیتم مخفی میشه. این شاید به دلیل کد:

کد پی‌اچ‌پی:
android:drawSelectorOnTop="true" 

باشه ولی خب این رو هم حذف می کنم دیگه کلاً کار نمی کنه.
لطفا راهنمایی کنید.
پاسخ

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#7
(۱۳۹۳/۰۹/۲۸, ۱۲:۱۶ ب.ظ)'saeid2014' نوشته:
(۱۳۹۳/۰۹/۲۶, ۰۷:۱۴ ب.ظ)'admin' نوشته: سلام.
بله این مشکل از آنجا ناشی می شود که بخش تعیین رنگ item را در روش getView نوشته ایم.
برای رفع این مشکل :
یک آرایه با تعداد عناصر برابر تعداد item های ListView بسازید و در آن، نام 4 رنگ را به صورت تکرار شونده بنویسید (در ابتدای اجرای کدهای Activity و خارج از روش getView). اکنون در روش getView ، کدهای قبلی در مورد رنگ ها را حذف کرده و بر اساس متغیر position که شماره متناظر با item است، یک رنگ را از آن آرایه شامل نام رنگ ها می خوانید و در پس زمینه item نمایش می دهید.


 

سلام. من برای تغییر رنگ بندی آیتمها از همین روش استفاده می کنم و درست کار می کنه. در برنامه من رو هر آیتمی که کلیک میشه، برنامه به یه اکتیویتی دیگه ای هدایت میشه. حالا مساله ای که هست اینه که میخوام موقع کلیک روی هر آیتم بک گراند اون آیتم رنگش عوض بشه. برای این کار از کلید شماره 2900 استفاده کردم، تقریبا درست کار می کنه ولی موقع کلیک که بک گراند آیتم عوض میشه، این بک گراند روی آیتم قرار میگیره و در نتیجه نوشته آیتم مخفی میشه. این شاید به دلیل کد:

کد پی‌اچ‌پی:
android:drawSelectorOnTop="true" 

باشه ولی خب این رو هم حذف می کنم دیگه کلاً کار نمی کنه.
لطفا راهنمایی کنید.
 

سلام.
آن را به کد زیر تغییر بدهید :

کد پی‌اچ‌پی:
android:drawSelectorOnTop="false" 

کد بالا باعث می شود که selector در پشت item نمایش داده شود، اما تضمینی نیست که شما آن را ببینید، زیرا ممکن است که لایه بندی ها را به گونه ای ساخته باشید که اصلا پس زمینه item قابل مشاهده نباشد.
بنابراین اگر درست عمل نکرد، خود بنده در این موارد، برای اینکه لایه بندی ها گیجم نکنند، برای لایه های مختلف، به طور موقت، رنگ های پس زمینه ای در فایل xml تعیین می کنم. سپس بر اساس آن رنگ ها، به طور دقیق محدوده لایه بندی ها قابل تشخیص است و بر اساس آنها، متوجه می شوم که مشکل از چیست و هم پوشانی های لایه ها در چه حدی است. بعد هم که همه چیز درست شد، آن رنگ های پس زمینه را به حالت اولیه بر می گردانم (حذف می کنم).

در ضمن، برای مشکلی که ذکر کرده بودند، حتما دوباره چک کنید، مثلا سریع به ابتدا و انتهای لیست بروید و چند بار تکرار کنید که اگر مشکل داشت، آن موارد را شما هم اعمال کنید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

تغییر رنگ بندی هر item از ListView ، در برنامه نویسی اندروید

#8
نقل قول:کد بالا باعث می شود که selector در پشت item نمایش داده شود، اما تضمینی نیست که شما آن را ببینید، زیرا ممکن است که لایه بندی ها را به گونه ای ساخته باشید که اصلا پس زمینه item قابل مشاهده نباشد.
بنابراین اگر درست عمل نکرد، خود بنده در این موارد، برای اینکه لایه بندی ها گیجم نکنند، برای لایه های مختلف، به طور موقت، رنگ های پس زمینه ای در فایل xml تعیین می کنم. سپس بر اساس آن رنگ ها، به طور دقیق محدوده لایه بندی ها قابل تشخیص است و بر اساس آنها، متوجه می شوم که مشکل از چیست و هم پوشانی های لایه ها در چه حدی است. بعد هم که همه چیز درست شد، آن رنگ های پس زمینه را به حالت اولیه بر می گردانم (حذف می کنم).
درست متوجه نشدم باید چکار کنم که مشکل رو متوجه بشم.
ببینید من در حالت عادی نمایش لیست ویو، از 2 رنگ برای آیتمها استفاده می کنم. یعنی در متد getview بر اساس پارامتر position ، اینکار رو انجام میدم. با این کد:
کد پی‌اچ‌پی:
            if (position%2==0){
                
row.setBackgroundColor(Color.parseColor("#cadff7"));
            }
            else{                
                
row.setBackgroundColor(Color.parseColor("#ebebeb")); 
حالا که برای تغییر رنگ زمینه آیتمها هنگام کلیک، از selector استفاده می کنم، درست کار می کنه ولی نوشته آیتم مخفی میشه. حالا دیگه نمیدونم لایه بندیها رو چطور ساختم که این مشکل پیش اومده.

جالب اینه که قبل از اینکه رنگ پس زمینه آیتمها رو با کد بالا تغییر بدم، بصورت اتوماتیک وقتی روی آیتم کلیک می کردم، رنگش عوض میشد، ولی از وقتی که این کد رو گذاشتم دیگه عمل نمی کنه و باید از selector  و این داستانها استفاده کنم.
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)