隐藏所选行的列表分隔符 android?
Hide listdivider for selected row android?
我有一个 android 本机 listview.now 我必须隐藏仅选定行的分隔线及其相邻行,如图所示 follows.how 我可以做到吗?
Here my lisview code
<ListView
android:id="@+id/listView_errors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:divider="@drawable/list_divider_complaint"
android:dividerHeight="1sp"
android:listSelector="@drawable/bgselected"
android:scrollbars="none" />
And the result so far
onSelect
代码你可以试试这个
yourListView.setDivider(null);
或
yourListView.setDivider(new ColorDrawable(android.R.color.transparent));
yourListView.setDividerHeight(0);
在自定义列表项布局中创建自定义分隔线视图。
然后,如果选择了一个项目,则隐藏此自定义分隔线视图。
风格:
<style name="HorizontalDivider">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">1px</item>
<item name="android:background">#444</item>
</style>
自定义列表项:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:background="@drawable/click_effect_green"
android:orientation="vertical" >
<TextView
android:id="@+id/line_a"
android:layout_marginTop="4dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="16dp"
android:textStyle="bold" />
<TextView
android:id="@+id/line_b"
android:layout_marginBottom="4dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="14dp" />
<View id="@+id/divider" style="@style/HorizontalDivider"/>
</LinearLayout>
您必须按照以下步骤操作:
删除列表视图分隔符
<ListView
android:id="@+id/listView_errors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:divider="@null"
android:listSelector="@drawable/bgselected"
android:scrollbars="none" />
将视图添加到 list_item.xml
考虑为 list_divider
<View
android:id="@+id/list_divider"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="@android:color/black" />
您可以在选择列表项时删除视图分隔线,就像您在 onItemClick
上选择一样,那么它应该是
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.findViewById(R.id.list_divider).setVisibility(View.GONE);
}
这是一个解决方案,您可以在其中执行任何您想要的自定义行。
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_complaint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:text="Daily Consumption"
android:textColor="#505050"
android:textSize="18sp"
android:textStyle="bold" />
<View
android:id="@+id/item_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#9e9e9e" />
</RelativeLayout>
列表视图
<ListView
android:id="@+id/listView_errors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:layout_gravity="center_horizontal"
android:listSelector="@drawable/bgselected"
android:scrollbars="none" />
适配器
ArrayAdapter<String> ar = new ArrayAdapter<String>(getActivity(), R.layout.complaint_listview, R.id.item_complaint, errors);
listErrors.setAdapter(ar);
分频控制器
private int prevSelected = -1;
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
selectedError = adapterView.getItemAtPosition(i).toString();
try {
controlDividers(i);
} catch (Exception e) {
//TODO
}
}
private void controlDividers(int position) {
if (prevSelected != -1) {
if (prevSelected == 0) {
listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
} else {
listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
listErrors.getChildAt(prevSelected - 1).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
}
}
if (position == 0) {
listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
} else {
listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
listErrors.getChildAt(position - 1).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
}
prevSelected = position;
}
我有一个 android 本机 listview.now 我必须隐藏仅选定行的分隔线及其相邻行,如图所示 follows.how 我可以做到吗?
Here my lisview code
<ListView
android:id="@+id/listView_errors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:divider="@drawable/list_divider_complaint"
android:dividerHeight="1sp"
android:listSelector="@drawable/bgselected"
android:scrollbars="none" />
And the result so far
onSelect
代码你可以试试这个
yourListView.setDivider(null);
或
yourListView.setDivider(new ColorDrawable(android.R.color.transparent));
yourListView.setDividerHeight(0);
在自定义列表项布局中创建自定义分隔线视图。 然后,如果选择了一个项目,则隐藏此自定义分隔线视图。
风格:
<style name="HorizontalDivider">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">1px</item>
<item name="android:background">#444</item>
</style>
自定义列表项:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:background="@drawable/click_effect_green"
android:orientation="vertical" >
<TextView
android:id="@+id/line_a"
android:layout_marginTop="4dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="16dp"
android:textStyle="bold" />
<TextView
android:id="@+id/line_b"
android:layout_marginBottom="4dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="14dp" />
<View id="@+id/divider" style="@style/HorizontalDivider"/>
</LinearLayout>
您必须按照以下步骤操作:
删除列表视图分隔符
<ListView android:id="@+id/listView_errors" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:divider="@null" android:listSelector="@drawable/bgselected" android:scrollbars="none" />
将视图添加到
list_item.xml
考虑为list_divider
<View android:id="@+id/list_divider" android:layout_width="fill_parent" android:layout_height="1dip" android:background="@android:color/black" />
您可以在选择列表项时删除视图分隔线,就像您在
onItemClick
上选择一样,那么它应该是@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { view.findViewById(R.id.list_divider).setVisibility(View.GONE); }
这是一个解决方案,您可以在其中执行任何您想要的自定义行。
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_complaint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:text="Daily Consumption"
android:textColor="#505050"
android:textSize="18sp"
android:textStyle="bold" />
<View
android:id="@+id/item_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#9e9e9e" />
</RelativeLayout>
列表视图
<ListView
android:id="@+id/listView_errors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:layout_gravity="center_horizontal"
android:listSelector="@drawable/bgselected"
android:scrollbars="none" />
适配器
ArrayAdapter<String> ar = new ArrayAdapter<String>(getActivity(), R.layout.complaint_listview, R.id.item_complaint, errors);
listErrors.setAdapter(ar);
分频控制器
private int prevSelected = -1;
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
selectedError = adapterView.getItemAtPosition(i).toString();
try {
controlDividers(i);
} catch (Exception e) {
//TODO
}
}
private void controlDividers(int position) {
if (prevSelected != -1) {
if (prevSelected == 0) {
listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
} else {
listErrors.getChildAt(prevSelected).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
listErrors.getChildAt(prevSelected - 1).findViewById(R.id.item_divider).setVisibility(View.VISIBLE);
}
}
if (position == 0) {
listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
} else {
listErrors.getChildAt(position).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
listErrors.getChildAt(position - 1).findViewById(R.id.item_divider).setVisibility(View.INVISIBLE);
}
prevSelected = position;
}