Razieh Shahraki

استفاده از selection widget ها در اندروید

2 ارسال در این موضوع قرار دارد

[align=center][rtl]استفاده از Selection Widget ها[/rtl]

[/align]

[rtl]گاهی لازم است که محتویات فیلدها رابرای کاربران محدود کنیم تا کاربران اطلاعات درست وارد نمایند البته در نهایت محدودیت در ورودی ها را می توان در انتخاب از بین چند آیتم باشد که اندروید ComboBoxو List و ... را برای این منظور ارائه کرده است.[/rtl]

[rtl]همچنین چارچوبی به عنوان DataAdapterرا فراهم آورده که به امکان انتخاب این Widget ها را می دهد.[/rtl]

[rtl]Adapterها برای ارائه لیستی از داده ها به Widgetها انتخاب مناسبی است.همچنین برای تبدیل عناصر جداگانه برای تبدیل به دیدگاهایخاص برای نمایش در Widgetها نیز خوب عمل می کند.[/rtl]

[rtl]ساده ترین این نوع Adapterها از نوع ArrayAdapterمی باشد که آن را با یک مثال شرح می دهیم.[/rtl]

String[] items={"P30droid", "Android", "Array","Adapter"};New ArrayAdapter(this,android.R.layout.simple_list_item_1,items);

[rtl]

سازنده این ArrayAdapterسه پارامتر را دریافت می کند.

 

1-DataContext(منبعداده) که معمولا اشاره به Activity فعلی دارد(This)؛مشخص می کند منبع داده (Items) در کجا قرار دارد.

2-نحوه نمایش اطلاعات (در مثال شرح میدهیم.به طور پیش فرض TextView می باشد)

3-ArrayViewدارای متدی به نام getView می باشد که به آیتم ها فراخوانی می شود.

 

در اینجا با 3 نوع از این Widgetها آشنا می شویم.

ListBox

 

ListBox در اندروید ListView شناخته می شود کهبرای نمایش آیتم ها باید متد SetAdapter این widgetفراخوانی شود که پارامتر این متد یک نوع از ArrayAdapterمی باشد و پر استفاده ترین رویداد این Widget رویداد setOnItemSelectedListener می باشد که با انتخاب هر کدام از ایتم های این لیست اینرویداد فراخوانی می شود.

مثال:[/rtl]

[rtl]

پروژه جدیدی ایجاد کنید و در فایل Main.xmlدستورات زیر را وارد نمایید.

[/rtl]

<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" >android:id="@android:id/list"android:layout_width="fill_parent"android:layout_height="fill_parent"android:drawSelectorOnTop="false"/>

[rtl]

و در فایل MainActivity.java دستورات زیر را وارد نمایید.

[/rtl]

import android.os.Bundle;import android.app.Activity;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {ListView listView;String [] items={"Red","Blue","Green","Black","White"};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listview=(ListView)findViewById(android.R.id.list);txt1 =(TextView)findViewById(R.id.textView1);listview.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,items));}}

[rtl]

توضیح خط زیر:

[/rtl]

listview.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,items));

[rtl]

با این دستور مشخص کردیم که آرایه بهصورت ساده در لیست نمایش داده شود(پارامتر دوم ArrayListنحوه نمایش را مشخص می کند یا به عبارت دیگر ظاهر سطرها را مشخص می کند)

 

خروجی برنامه به صورت زیر است.

274x16file:///C:\Users\Sony\AppData\Local\Temp\msohtml1\01\clip_image002.jpg[/img][/rtl]

do.php?img=83

[rtl]

در صورتی که خط فوق را به صورت زیرتغییر دهیم

[/rtl]

listview.setAdapter(new ArrayAdapter(this,	android.R.layout.select_dialog_singlechoice,items));

[rtl]

و در فایل xmlخط زیر را به listView اضافه کنیم

[/rtl]

android:choiceMode="singleChoice"

[rtl]

خروجی برنامه به صورت زیر می شود.[/rtl]

do.php?img=89

[rtl]همچنین شما می توانید با تغییر دو خطفوق به صورت زیر برنامه را بگونه ای تغییر دهید که امکان انتخاب چند آیتم را داشته باشید.

[/rtl]

listview.setAdapter(new ArrayAdapter(this,	android.R.layout.select_dialog_multichoice,items));

[rtl]و در فایل xml[/rtl]

android:choiceMode="multipleChoice"

[rtl]در این صورت خروجی برنامه به صورت زیرمی شود.[/rtl]

do.php?img=84

[rtl]در اینجا می خواهیم رویداد setOnItemSelectedListener را برای List تنظیم کنیم.[/rtl]

[rtl]برای این کار باید کلاس زیر را به پروژهاضافه کنید.[/rtl]

import android.widget.AdapterView.OnItemSelectedListener;

[rtl]و دستورات زیر را وارد کنید.[/rtl]

listview.setOnItemSelectedListener(new OnItemSelectedListener() {		@Override		public void onItemSelected(AdapterView<?> arg0, View view,				int arg2, long arg3) {			// TODO Auto-generated method stubزمانی که ایتمی را انتخاب می کنیم این رویداد رخ می دهد.			//txt1.setText(items[arg2]);در خط فوق arg2 ایندکس عنصر انتخاب شده می باشد که از صفر شروع می شود.		}		@Override		public void onNothingSelected(AdapterView<?> arg0) {			// TODO Auto-generated method stubزمانی که هیچ ایتمی انتخاب نشده باشد این رویداد رخ می دهد.						}	});

[rtl]سه مورد از مهمترین متدهای listView

:[/rtl]

[rtl]1- listview.getSelectedItem(); : مقدار آیتم انتخاب شده را برمی گرداند.[/rtl]

[rtl]2- listview.getSelectedItemPosition();: اندیس ایتمانتخاب شده را بر می گرداند.[/rtl]

[rtl]3- listview.getItemAtPosition();: ورودی این متد مقدار عددی می باشد و مقدار ایتم را درمکان مشخص شده برمی گرداند.[/rtl]

 

[rtl] [/rtl]

[rtl]Spinner[/rtl]

[rtl]Spiner در اندروید معادل DropDownمی باشد .شما می توانید از امکانات یک ListBox استفاده کنیدبدون اینکه فضای یک ListBox را داشته باشید.[/rtl]

[rtl]تمام تنظیمات Spinerها معادل با ListBoxها می باشد.[/rtl]

[rtl]در اینجا می خواهیم مثال قبل را با Spinerانجام دهیم .برای اینکار پروژه جدیدی ایجاد کرده و دستورات زیر را در فایل xmlوارد کنید.[/rtl]

<?xml version=”1.0” encoding=”utf-8”?>xmlns:android=”http://schemas.android.com/apk/res/android”android:orientation=”vertical”android:layout_width=”fill_parent”android:layout_height=”fill_parent” >هنگامی که ایتمی انتخاب شود در تکست باکس نمایان می شود.           android:id="@+id/textView1"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="TextView" />android:layout_width="fill_parent"android:layout_height="wrap_content"android:drawSelectorOnTop="true"/>

[rtl]دستورات زیر را در فایل javaوارد کنید.[/rtl]

import android.os.Bundle;import android.app.Activity;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Spinner;import android.widget.TextView;public class MainActivity extends Activity {TextView txt1;String [] items={"Red","Blue","Green","Black","White"};Spinner spiner;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);txt1=(TextView)findViewById(R.id.textView1);spiner=(Spinner)findViewById(R.id.spiner);spiner.setAdapter( new ArrayAdapter(this,android.R.layout.simple_spinner_item,items));spiner.setOnItemSelectedListener(new OnItemSelectedListener() {public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {txt1.setText(spiner.getSelectedItem().toString());}public void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}}

[rtl]خروجی به صورت زیر می باشد.[/rtl]

do.php?img=85

[rtl]متدهای spinnerهم مانند ListView می باشد.[/rtl]

[rtl]با تغییر خط زیر [/rtl]

spiner.setAdapter( new ArrayAdapter(this,android.R.layout.simple_spinner_item,items));

[rtl]به صورت [/rtl]

spiner.setAdapter( new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,items));

[rtl]خروجی به صورت زیر می شود.[/rtl]

do.php?img=86

[rtl]GridView[/rtl]

[rtl]همانطور که از نام آن پیداست به شماامکان نمایش اطلاعات به صورت دوبعدی را می دهد در اینجا شما کنترل محدودی روی تعداد سطرها و اندازه ستون ها دارید تعداد سطرها بستگی به تعداد ایتم ها در Adapterدارد و شما می توانید و شما می توانید تعداد ستون ها را تعیین کنید.[/rtl]

[rtl]به مثال زیر توجه کنید مهمترین خصوصیات آن را شرح می دهیم .[/rtl]

<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" >           android:id="@+id/textView1"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:text="TextView" />	android:id="@+id/grid"	android:layout_width="fill_parent"	android:layout_height="fill_parent"دو خط فوق فضای خالی بین آیتم و شبکه را مشخص می کند.	android:verticalSpacing="35px"	android:horizontalSpacing="5px"	android:numColumns="auto_fit"تعداد ستون های GridView را مشخص می کند اگر با auto_fit تنظیم شود با توجه به فضای موجودیت و دیگر خصوصیات ، تعداد ستون مشخص می شود.	android:columnWidth="100px"خط فوق پهنای هر ستون بر حسب پیکسل را مشخص می کند.	androidtretchMode="columnWidth"	android:gravity="center"

[rtl]زمانی که خطوط فوق را به صورت زیر تنظیم می کنیم.[/rtl]

android:numColumns="auto_fit"

[rtl] [/rtl]

android: stretchMode="columnWidth"

 

[rtl]فضای خالی که توسط ستون ها و فاصلهگذاری ها گرفته نمی شود چه کاری باید کنیم؟[/rtl]

[rtl]به عنوان مثال فرض کنید صفحه 320 پیکسلباشد و android:columnWidth="100px" و [/rtl]

[rtl]android:horizontalSpacing="5px" باشد. [/rtl]

[rtl]3 ستون 310 پیکسل فضا می گیرد .3 ستونرا 3 تا 4 پیکسل گسترش داده تا فضای خالی را پوشش دهند.[/rtl]

[rtl]با قرار دادن android: stretchMode="spacingWidth" دو فضای خالی هر کدام را 5 پیکسل گسترش داده تا فضای خالی را تکمیل کند.[/rtl]

[rtl] [/rtl]

[rtl]ادامه دستورات را در فایل javaوارد نمایید.[/rtl]

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.GridView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity {TextView selection;GridView gridView;String[] items={"1", "2", "3", "4", "5","6", "7", "7", "8", "9","10", "11", "12", "13", "14","15", "16", "17", "18", "19","20", "21", "22", "23", "24"};@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.activity_main);selection=(TextView)findViewById(R.id.textView1);gridView=(GridView) findViewById(R.id.grid);ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,items);gridView.setAdapter(adapter);gridView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {selection.setText(items[arg2]);}});}}

 

[rtl]خروجی به صورت زیر می باشد.[/rtl]

do.php?img=87

[rtl]در صورتی که android:numColumns="auto_fit" را به صورت  android:numColumns="3" تغییر دهید خروجی به صورت زیر می شود.

do.php?img=88

[/rtl]

منبع :http://www.vogella.com/android.html

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


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

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری