所以基本上我从我的应用程序中制作类似'选项'的东西,我希望它看起来有点像android选项。我正在使用ListView
与BaseAdapter
,我设法将textview和checkbox放入一行(因为标准复选框的文本在右侧,我希望它不是这样)。当我按下复选框时,我也想要突出显示文本视图(如在第二个屏幕上),但只突出显示框周围的小区域。第二个屏幕显示按下整个文本视图。这两个动作(在复选框或textview上预设)具有相同的结果,因此我不希望它们具有不同的外观。
第一个屏幕:http://i.stack.imgur.com/JY8Xw.png 第二个屏幕:http://i.stack.imgur.com/vNQis.png
//import [..]
public class OptionsAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private ArrayList<Option> options;
private final String TAG = "OptionsAdapter";
private static final int type_textBox = 0;
private static final int type_checkBox = 1;
private static final int type_separator = 2;
public OptionsAdapter(Context context, ArrayList<Option> options) {
this.context = context;
this.options = options;
inflater = LayoutInflater.from(context);
}
@Override
public int getItemViewType(int position) {
final Option opt = this.getItem(position);
return opt.getMode();
}
@Override
public int getCount() {
return options.size();
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public Option getItem(int position) {
return options.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean isEnabled(int position) {
return options.get(position).getMode() == 2 ? false : true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final OptionsViewHolder ovh;
int type = getItemViewType(position);
final Option opt = this.getItem(position);
if (convertView == null) {
ovh = new OptionsViewHolder();
convertView = inflater.inflate(R.layout.row_text_checkbox, null);
ovh.setTextview((TextView) convertView
.findViewById(R.id.opt_row_text));
ovh.setCheckbox((CheckBox) convertView
.findViewById(R.id.opt_row_cb));
ovh.getTextview().setText(opt.getName());
ovh.getCheckbox().setText("");
switch (type) {
case type_checkBox:
ovh.getCheckbox().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
opt.toggle();
}
});
break;
case type_textBox:
ovh.getCheckbox().setVisibility(View.GONE);
break;
case type_separator:
ovh.getCheckbox().setVisibility(View.GONE);
TextView tv = ovh.getTextview();
tv.setTextSize(12);
tv.setAllCaps(true);
tv.setTextColor(Color.GRAY);
tv.setGravity(Gravity.CENTER);
tv.setPadding(10, 30, 10, 5);
break;
}
convertView.setTag(ovh);
} else {
ovh = (OptionsViewHolder) convertView.getTag();
}
ovh.getTextview().setText(opt.getName());
return convertView;
}
}
答案 0 :(得分:0)
将OnCheckedChangeListener添加到CheckBox视图,并在选中复选框时调用ListView.setSelection(position)。您可能需要一些逻辑函数来确定CheckBox所在的位置。
答案 1 :(得分:0)
在BaseAdapter的getView()方法中,您应该执行以下操作:
获取list_item.xml文件中的TextView或父视图的引用(您为listview的每一行创建的布局文件),并在onCheckedChangedListener方法中设置该视图的“backgroundcolor”属性,达到理想的颜色。 每个行项的父视图可能是RelativeLayout或LinearLayout。无论父母如何,您都可以访问“backgroundcolor”属性。
listitem_relativelayout.setBackgroundColor(
getApplicationContext().getColor(R.color.yourcolor));
虽然我不确定确切的语法,但解决方案肯定是这样。
答案 2 :(得分:0)
执行此操作的正确方法是在TextView
中同时包含CheckBox
和LinearLayout
,然后将clickable="false"
和focusable="false"
设置为两者,并且所有单击布局时应管理onClick
个事件(因此布局需要和ID)