Android ExpandableListView : 设置单击时所选项目的背景颜色
Android ExpandableListView : set background color of selected item on click
当用户单击我的 expandableListView
中的子项目时,我正在尝试为项目设置背景颜色。
这是代码:
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, final int groupPosition, final int childPosition, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(New_annonce_act_step2.this);
builder.setMessage("Vous avez choisi la catégorie " +listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition) +", Continuer ?")
.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent myIntent = new Intent(New_annonce_act_step2.this, New_annonce_act_step22.class);
myIntent.putExtra("titre", titre);
myIntent.putExtra("categorie", categorie);
New_annonce_act_step2.this.startActivity(myIntent);
finish();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
})
.setNegativeButton("Non", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder.create();
builder.show();
return false;
}
});
这是布局中的 ExpandableListView 声明:
<ExpandableListView
android:id="@+id/nouvelle_annonce_categorie"
android:layout_width="match_parent"
android:layout_height="320dp"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:choiceMode = "singleChoice"
android:listSelector = "@drawable/selector_categorie_item"
android:layout_marginTop="15dp" />
这里是 selector_categorie_item.xml 的 coe :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@android:color/holo_blue_bright" android:state_pressed="true"/>
<item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/>
<item android:drawable="@android:color/holo_blue_dark" android:state_activated="true"/>
</selector>
首先删除属性:
<ExpandableListView
android:listSelector = "@drawable/selector_categorie_item" />
并从 ExpandableListView
中删除 background
选择器。
然后在您的子布局项中放置下一个属性:
<YourLayout
android:background = "@drawable/your_selector" />
也许您需要这样的selector
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true"
android:state_pressed="true" android:drawable="@drawable/exp_list_item_bg_pressed" />
<item android:state_enabled="true"
android:state_focused="true" android:drawable="@drawable/exp_list_item_bg_focused" />
<item android:state_enabled="true"
android:state_selected="true" android:drawable="@drawable/exp_list_item_bg_focused" />
<item
android:drawable="@drawable/exp_list_item_bg_normal" />
</selector>
这对我有用:
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) {
int index = parent.getFlatListPosition(ExpandableListView
.getPackedPositionForGroup(groupPosition));
parent.setItemChecked(index, true);
return false;
}
});
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
/*Toast.makeText(scanTemplateFragment.getActivity(),
expandableListTitle.get(groupPosition)
+ " -> "
+ expandableListDetail.get(
expandableListTitle.get(groupPosition)).get(
childPosition), Toast.LENGTH_SHORT).show();*/
int index = parent.getFlatListPosition(ExpandableListView
.getPackedPositionForChild(groupPosition, childPosition));
parent.setItemChecked(index, true);
return false;
}
});
并从 list_item.xml 设置背景:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvListItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
android:paddingTop="10dp"
android:background="@drawable/row_highlighter"
android:paddingBottom="10dp" />
</LinearLayout>
row_highlighter.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/std_color_1_bright" android:state_activated="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>
当用户单击我的 expandableListView
中的子项目时,我正在尝试为项目设置背景颜色。
这是代码:
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, final int groupPosition, final int childPosition, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(New_annonce_act_step2.this);
builder.setMessage("Vous avez choisi la catégorie " +listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition) +", Continuer ?")
.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent myIntent = new Intent(New_annonce_act_step2.this, New_annonce_act_step22.class);
myIntent.putExtra("titre", titre);
myIntent.putExtra("categorie", categorie);
New_annonce_act_step2.this.startActivity(myIntent);
finish();
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}
})
.setNegativeButton("Non", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder.create();
builder.show();
return false;
}
});
这是布局中的 ExpandableListView 声明:
<ExpandableListView
android:id="@+id/nouvelle_annonce_categorie"
android:layout_width="match_parent"
android:layout_height="320dp"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:choiceMode = "singleChoice"
android:listSelector = "@drawable/selector_categorie_item"
android:layout_marginTop="15dp" />
这里是 selector_categorie_item.xml 的 coe :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@android:color/holo_blue_bright" android:state_pressed="true"/>
<item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/>
<item android:drawable="@android:color/holo_blue_dark" android:state_activated="true"/>
</selector>
首先删除属性:
<ExpandableListView
android:listSelector = "@drawable/selector_categorie_item" />
并从 ExpandableListView
中删除 background
选择器。
然后在您的子布局项中放置下一个属性:
<YourLayout
android:background = "@drawable/your_selector" />
也许您需要这样的selector
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true"
android:state_pressed="true" android:drawable="@drawable/exp_list_item_bg_pressed" />
<item android:state_enabled="true"
android:state_focused="true" android:drawable="@drawable/exp_list_item_bg_focused" />
<item android:state_enabled="true"
android:state_selected="true" android:drawable="@drawable/exp_list_item_bg_focused" />
<item
android:drawable="@drawable/exp_list_item_bg_normal" />
</selector>
这对我有用:
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) {
int index = parent.getFlatListPosition(ExpandableListView
.getPackedPositionForGroup(groupPosition));
parent.setItemChecked(index, true);
return false;
}
});
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
/*Toast.makeText(scanTemplateFragment.getActivity(),
expandableListTitle.get(groupPosition)
+ " -> "
+ expandableListDetail.get(
expandableListTitle.get(groupPosition)).get(
childPosition), Toast.LENGTH_SHORT).show();*/
int index = parent.getFlatListPosition(ExpandableListView
.getPackedPositionForChild(groupPosition, childPosition));
parent.setItemChecked(index, true);
return false;
}
});
并从 list_item.xml 设置背景:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvListItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
android:paddingTop="10dp"
android:background="@drawable/row_highlighter"
android:paddingBottom="10dp" />
</LinearLayout>
row_highlighter.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/std_color_1_bright" android:state_activated="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>