我需要更改微调器上显示的所选项目的文本大小和方向,但我还需要继续使用微调器的默认布局:android.R.layout.simple_spinner_item
为什么?因为如果我使用个性化布局,我无法在微调器上加载动态生成的字符串数组。这是 Android 的失败:S
有人可以帮帮我吗?
最佳答案
好吧,这有点棘手,但不是太难。
- 扩展
SimpleAdapter
,创建自定义适配器。 - 确保您在这个新适配器中实现了
SpinnerAdapter
。 (如果您使用的是 Eclipse,让它通过创建未实现的方法来帮助您) - 实现
SpinnerAdapter
将强制您添加下拉 View 资源 xml 对象。静态添加它,或定义一个 setter。 - 在
public View getView(int position, View convertView, ViewGroup parent)
内(这是您将自定义 View 返回给 Spinner 的地方),调用parent.getSelectedItem()
查看它是否与列表中位置
的项目相同。 - 如果是,请将字体设置得更大。如果不是,请将其设置为正常(不要忘记这样做,因为微调器会回收 View ,将较大的字体留在原处)。
要使用适配器,请从您的 Activity 中调用如下内容:
MyCustomSpinnerAdapter adapter = new MyCustomSpinnerAdapter(this, myListOfItems);
adapter.setDropDownViewResource(R.layout.my_dropdown_view_resource);
mySpinner.setAdapter(adapter);
要了解 google 是如何做到的,请查看 google codesearch here并搜索“Android ArrayAdapter.java”——点击 core/java/android/widget 链接,它会带你到包含所有各种适配器、接口(interface)和小部件的包,你需要解决剩下的问题。
祝你好运。
编辑:这是一个未经测试的第一次破解示例:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import com.beget.consumer.R;
public class MyCustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {
private String[] list;
private Context context;
public MyCustomSpinnerAdapter(Context context, String[] list) {
super();
this.list = list;
this.context = context;
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int position) {
//you need to add index safety here - make sure that position is a valid index
return list[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = context.inflate(R.layout.my_view_item, null);
holder = new ViewHolder();
holder.myView = (TextView) convertView.findViewById(R.id.beget_box_description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (list[position] == ((Spinner) parent).getSelectedItem()) {
holder.myView.setTextSize(25);
} else {
holder.myView.setTextSize(15);
}
holder.myView.setText(list[position]);
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
//change this if you want a different view for your dropdown list. It's the same as above, except you could
//inflate a different view if you wanted.
return getView(position, convertView, parent);
}
static class ViewHolder {
TextView myView;
}
}
关于android - 如何更改微调器的文本大小和方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826708/