我正在编写一个由RCU控制的Android应用程序,而不是触摸事件/手指。该RCU具有UP,DOWN,LEFT,RIGHT和OK键(简化)。这意味着在当前突出显示的图形对象上处理“确定”按钮。例如,想想旧DVD播放器的界面。
我正在尝试为此目的调整ListView。假设我想呈现5个选项的垂直列表:
最初,第一个选项是,应该是某种颜色(高光/焦点颜色),而其他4个选项是另一种颜色(默认颜色)。
当用户按下UP时,可能会翻译到顶部并以高亮/焦点颜色显示;是在列表底部添加,并以默认颜色显示:
可通过ArrayAdapter向ListView提供可能的选项:
public class DetailOptionsItemAdapter extends ArrayAdapter<String> {
public DetailOptionsItemAdapter(Context context, String[] options) {
super(context, R.layout.options, options);
}
}
在派生ListView的类的构造函数中:
setAdapter(new DetailOptionsItemAdapter(getContext(), new String[]{"Yes", ...})));
我的布局(R.layout.options)定义如下:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@color/white"
android:textColorHighlight="@color/red"
android:includeFontPadding="true"
android:ellipsize="end"
android:singleLine="true"/>
收到UP或DOWN时,我将请求的索引翻译到顶部:
smoothScrollToPositionFromTop(... the index ..., 0);
这很有效。到目前为止,所有内容都以白色显示,默认颜色。
现在我需要插入第一项永远是红色的。我尝试将视图放在旧位置并给它一些颜色,然后将视图放在新位置并给它一个红色,但没有成功。
有什么想法吗?谢谢!
答案 0 :(得分:1)
我从不擅长在代码中设置文本颜色,但是你不能只是覆盖适配器中的getView()方法,然后根据项目在列表中的位置,你可以设置文字颜色吗?
即:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final TextView v = (TextView) super.getView(position, convertView, parent);
if (0 == position) {
v.setTextColor(blah);
} etc..
}
答案 1 :(得分:0)
我已经制作了一个小实验,用于通过实用的方式实现ListView的列表选择器属性。
你需要创建自定义适配器和getView()方法,只需检查选定项目位置的条件并为其应用颜色。
class Adapter extends BaseAdapter{
private Context context;
private ArrayList<Setter> setter = new ArrayList<Setter>();
private int pos;
public Adapter(Context context, ArrayList<Setter> list) {
setter = list;
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return setter.size() != 0 ? setter.size() : 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return setter.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null){
holder = new Holder();
convertView = View.inflate(context, R.layout.item, null);
holder.txtID = (TextView) convertView.findViewById(R.id.text);
holder.txtName = (TextView) convertView.findViewById(R.id.text2);
convertView.setTag(holder);
}else{
holder = (Holder) convertView.getTag();
}
if ( pos == position ) {
convertView.setBackgroundColor(Color.MAGENTA);
}else{
convertView.setBackgroundColor(Color.WHITE);
}
holder.txtID.setText(setter.get(position).getId());
holder.txtName.setText(setter.get(position).getName());
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pos = position;
notifyDataSetChanged();
}
});
return convertView;
}
static class Holder{
TextView txtID;
TextView txtName;
}
}