gpt4 book ai didi

android-layout - ListView选择自定义颜色

转载 作者:行者123 更新时间:2023-11-29 02:01:53 25 4
gpt4 key购买 nike

我已经制作了自己的自定义主题,但有一些主题没有颜色,例如我正在处理的 ListView,所以我正在逐个进行这些操作。我已经完成了我的作业,并且知道如何创建可绘制背景选择器 XML 文件,但它无法正常工作。此外,我尝试了其他一些方法来强制它但无法让它工作。我会向您展示问题,然后按照我的代码进行操作。

“按下”颜色有效。在此屏幕截图中,我按住了一个项目:

Pressing ListView Item

但是,当我移开手指时,所选项目不会保持彩色。请注意, list 1 已被选中并显示,但没有突出显示:

Finger removed, ListView Item is selected but no color

这是我应用于每个列表项 View 的背景可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false"
android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@android:color/holo_orange_dark" />
<item android:state_selected="true" android:state_pressed="false"
android:drawable="@android:color/holo_orange_light" />
</selector>

您会注意到“selected”应该显示“holo_orange_light”,但实际上没有。下面的代码是我分配背景的地方。我最初是在实例化一个现成的 ArrayAdapter。为了应用这个背景,我继承了 ArrayAdapter 并将代码添加到构建 View 的方法中。

这是自定义的 ArrayAdapter:

private class CustomArrayAdapter extends ArrayAdapter<Checklist> {

public CustomArrayAdapter(Context context, int resource, int textViewResourceId,
List<Checklist> objects) {
super(context, resource, textViewResourceId, objects);

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = super.getView(position, convertView, parent);
convertView.setBackgroundResource(R.drawable.listview_background);
return convertView;
}

}

FWIW 这是创建适配器的调用,因此您可以看到我使用的参数:

setListAdapter(new CustomArrayAdapter(getActivity(),
android.R.layout.simple_list_item_activated_1, android.R.id.text1,
KnowUrStuffApp.getDbHelper().getChecklists()));

所以那个代码让我离开了我现在的位置。但是,我试图以几种多余的方式强制它着色。我创建了一个名为 setSelectionHilight 的例程,它明确地将 View 背景着色为全橙色。然后我创建了一个 onItemSelectedListener 分配给调用 setSelectionHilight 的 ListView。然后,一旦所有内容加载完毕,我就会明确地调用例程。这些都没有任何效果:

private void setSelectionHilight(ListView listView, View selectedView) {
for (int i = 0; i < listView.getChildCount(); i++) {
View child = listView.getChildAt(i);
if (child == selectedView)
child.setBackgroundColor(getActivity().getResources().getColor(android.R.color.holo_orange_light));
//else
//child.setBackgroundResource(0);
}
}


private OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {



@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setSelectionHilight((ListView) parent, view);

}

@Override
public void onNothingSelected(AdapterView<?> parent) {
setSelectionHilight((ListView) parent, null);

}

};

同样,我只是在试验正上方的 block 。在考虑我的问题的解决方案时,您可以安全地忽略它,但我将其包括在内以获取完整图片。感谢您提供解决此问题的任何帮助。另一位辅助信息是 ListView 封装在 ListFragment 中,我使用的是随附的默认布局。我没有 ListView 的显式 XML 元素。

最佳答案

我想做类似的事情,并开发了自己的逻辑来实现它。我的代码用于突出显示当前选定的 ChildView,如果您看到该代码,则可以为 ParentView 和 ChildView 实现它。

    public int _groupPosition = -1;
View _lastColored;
private int _highlightedGroup = -1;
private int _highlightedChild;



public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {

_groupPosition = groupPosition;
_highlightedGroup = groupPosition;
_highlightedChild = childPosition;
if (_lastColored != null) {
_lastColored.setBackgroundColor(Color.TRANSPARENT);
}
_lastColored = v;
v.setBackgroundColor(Color.rgb(214, 214, 214)); // whatever colour you want to set
..... // your code here
}

无需在 XML 文件中使用任何选择器。这段代码完成了所有工作。祝你好运!

关于android-layout - ListView选择自定义颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com