规范申明
Spinner就是下拉菜单,也等于swing的combo box、html的,因为手机画面有限,要在有限的范畴选择项目,下拉菜单是唯
一、也是较好的选择。
Android 供给的Spinner Widget的下拉菜单已经十分好用了,款式也还适用。
但本规范的示范重点在于自定义下拉菜单里的款式,其关键在于挪用 setDropDownViewResource办法,以XML的体例定义下拉菜单要显示的容貌。本规范除了自定义下拉菜单,还用法式设想了一段动画,当 User以触控的体例单击那个自定义的Spinner时,会以一段动画提醒User。
在new ArrayAdapter中,我们将会利用ArrayAdapter(Context context, int textViewResourceId, T[] objects)那个Constructor,textViewResourceId利用Android供给的ResourceID,objects为必需传递的字符串数组(String Array)。
规范法式
Adapter的setDropDownViewResource能够设置下拉菜单的显示体例,将该xml定义在res/layout目次下面,可针对下拉菜单中的TextView停止设置,好像本法式里的R。layout。myspinner_ dropdown即为自定义的下拉菜单TextView款式。
除了改动下拉菜单款式外,也对Spinner做了一点动态效果,单击Spinner时,晃动 Spinner再呈现下拉菜单(myAnimation)。
/* import法式略 */ public class EX04_08 extends Activity{
private static final String[] countriesStr =
{ "北京市", "上海市", "天津市", "重庆市" };
private TextView myTextView;
private Spinner mySpinner;
private ArrayAdapter adapter;
Animation myAnimation;
/** Called when the activity is first created。
@Override
public void onCreate(Bundle savedInstanceState)
super。onCreate(savedInstanceState);
/*加载main。xml Layout */
setContentView(R。
layout。main);
/* 以findViewById()获得对象 */
myTextView = (TextView) findViewById(R。id。myTextView);
mySpinner = (Spinner) findViewById(R。
id。mySpinner);
adapter = new ArrayAdapter(this,
android。R。layout。simple_spinner_item, countriesStr);
/* myspinner_dropdown为自定义下拉菜单款式定义在res/layout目次下 */
adapter。
setDropDownViewResource(R。layout。myspinner_dropdown);
/* 将ArrayAdapter添加Spinner对象中 */
mySpinner。setAdapter(adapter);
/* 将mySpinner添加OnItemSelectedListener */
mySpinner。
setOnItemSelectedListener
(new Spinner。OnItemSelectedListener()
@Override
public void onItemSelected
(AdapterView arg0, View arg1, int arg2,
long arg3)
/* 将所选mySpinner的值带入myTextView中 */
myTextView。
setText("选择的是" + countriesStr[arg2]);
/* 将mySpinner显示 */
arg0。setVisibility(View。VISIBLE);
@Override
public void onNothingSelected(AdapterView arg0)
// TODO Auto-generated method stub
/* 获得Animation定义在res/anim目次下 */
myAnimation = AnimationUtils。
loadAnimation(this, R。anim。my_anim);
/* 将mySpinner添加OnTouchListener */
mySpinner。setOnTouchListener(new Spinner。OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
/* 将mySpinner运行Animation */
v。
startAnimation(myAnimation);
/* 将mySpinner隐藏 */
v。setVisibility(View。INVISIBLE);
return false;
mySpinner。setOnFocusChangeListener(new Spinner。
OnFocusChangeListener()
@Override
public void onFocusChange(View v, boolean hasFocus)
// TODO Auto-generated method stub
res/layout/myspinner_dropdown。
xml
改动下拉菜单样子的XML,里面所利用的组件为TextView。
res/anim/my_anim。xml
Android的动画(Animation)是由4品种型(Type)所构成:alpha、scale、translate以及rotate,以下的自定义动画将利用此中的两种。
扩展进修
Animation次要有两种动态体例,一种是tweened animation(渐变更画),另一种是frame by frame animation(画面转换动画)。tweened animation则有以下4种根本转换体例。
· AlphaAnimation (transparency changes):通明度转换。
· RotateAnimation (rotations):扭转转换。
· ScaleAnimation (growing or shrinking):缩放转换。
· TranslateAnimation (position changes):位置转换。
定义好你想要的动画XML后,用AnimationUtils。loadAnimation将动画加载,并试图在想要加上动态效果的组件中利用startAnimation办法。