Spinner是android自带的下拉菜单控件,可以自定义,关键方法为其适配器Adapter方法setDropDownViewResource()将定义好的显示风格layout.xml作为参数传入
tv = (TextView) findViewById(R.id.tv); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, strs); spinner = (Spinner) findViewById(R.id.spinner); adapter.setDropDownViewResource(R.layout.myspinner_dropdown); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { tv.setText("您选择的是:"+strs[position]); parent.setVisibility(View.VISIBLE); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spinner.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { } }); animation = AnimationUtils.loadAnimation(this, R.anim.my_anim); spinner.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.startAnimation(animation); v.setVisibility(View.INVISIBLE); return false; } });
可以动态的更改Spinner内显示是条数,但此时构造Adapter时需要传入List集合,而不能使数组了。
private void init() { strs.add("北京"); strs.add("天津"); strs.add("上海"); tv = (TextView) findViewById(R.id.tv); et = (EditText) findViewById(R.id.et); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, strs); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); } private void setListeners() { findViewById(R.id.bt_add).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String trim = et.getText() .toString().trim(); if (TextUtils.isEmpty(trim)) { Toast.makeText(ArrayListActivity.this, "输入不能为空哦", 0).show(); } else { if (strs.contains(trim)) { Toast.makeText(ArrayListActivity.this, "添加的内容已经存在啦", 0) .show(); } else { adapter.add(trim); spinner.setSelection(adapter.getPosition(trim)); et.setText(""); } } } }); findViewById(R.id.bt_remove).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (adapter.getCount() == 0) { Toast.makeText(ArrayListActivity.this, "已经是空的啦", 0).show(); } else { adapter.remove(spinner.getSelectedItem().toString()); et.setText(""); if (adapter.getCount() == 0) { tv.setText(""); } } } }); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { tv.setText(parent.getSelectedItem().toString()); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); }
setDropDownViewResource主要是设置User单击Spinner后出现的下拉菜单样式,Android提供有两种基本的样式:
*android.R.layout.simple_spinner_item:TextView的下拉菜单
*android.R.layout.simple_spinner_dropdown_item:除了有TExtView,右边还有radio的下拉菜单。
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方法。