我有PreferenceScreen包含许多CheckBox,我通过将其引用到自定义布局来自定义它:
<?xml version="1.0" encoding="utf-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:summary="checkbox one"
android:key="key_one"
android:layout="@layout/mylayout"
/>
<CheckBoxPreference
android:summary="checkbox two"
android:key="key_two"
android:layout="@layout/mylayout"
/>
</PreferenceScreen>
mylayout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:minWidth="@dimen/preference_icon_minWidth"
android:orientation="horizontal">
<ImageView
android:id="@+android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</LinearLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dip"
android:layout_marginRight="8dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView
android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:fadingEdge="horizontal" />
<TextView
android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4" />
</RelativeLayout>
<LinearLayout
android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="@dimen/preference_widget_width"
android:gravity="center"
android:orientation="vertical" />
</LinearLayout>
每件事情都运行正常我也会在prefs活动中的复选框之间自定义divider:
ListView list = (ListView) findViewById(android.R.id.list);
list.setDivider(new ColorDrawable(Color.RED)); // or some other color int
list.setDividerHeight((5));
list.setVerticalScrollBarEnabled(false);
当我想将填充仅设置为分隔符时:
list.setPadding(0, 0, 0, 0);
它将填充设置为所有视图,
我如何才能将填充设置为分隔符而不影响所有视图的填充。
任何帮助将不胜感激,谢谢
答案 0 :(得分:4)
允许偏好分隔符填充
首先:将此行添加到您的偏好活动中,这会导致Android默认分隔符的透明度
list.setDivider(new ColorDrawable(0x00000000));
第二次:在res中创建名为drawable的文件夹,然后在其上创建divider.xml,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#B22222" />
</shape>
第三:
将View添加到mylayout.xml,所以它将如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:minWidth="@dimen/preference_icon_minWidth"
android:orientation="horizontal">
<ImageView
android:id="@+android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
</LinearLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dip"
android:layout_marginRight="8dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:fadingEdge="horizontal" />
<TextView android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4" />
<View
android:id="@+id/divider"
android:background="@drawable/divider"
android:layout_width="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_height="5dp"
android:layout_below="@+android:id/summary"/>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="@dimen/preference_widget_width"
android:gravity="center"
android:orientation="vertical" />
这里你要添加View以查看文本,并将该视图引用到drawable res中的分隔符形状,这样最终您将获得一个可以根据需要自定义的自定义分隔符。
希望能帮到你。输出如下:
答案 1 :(得分:1)
您必须创建自定义可绘制形状
<强> custom_divider.xml 强>
<shape android:shape="rectangle">
<solid android:color="@color/grey" />
<corners android:radius="2dp" />
</shape>
将此设置为xml
中ListView的分隔符<强> activity_list.xml 强>
<ListView
android:dividerHeight="2dp"
android:divider="@drawable/custom_divider"
...
/>
答案 2 :(得分:1)
您必须为分隔符创建自己的可绘制资源:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="5dp">
<shape android:shape="rectangle">
<solid android:color="#FF0000" />
<size android:height="4dp" />
</shape>
</inset>
在这种情况下,分隔线形状高度为4dp,顶部填充为5dp,当您设置分隔线高度时,必须对形状高度+插入进行求和。
ListView list = (ListView) findViewById(android.R.id.list);
list.setDivider(new ColorDrawable(Color.RED)); // or some other color int
list.setDividerHeight((5)); //wrorng code
list.setVerticalScrollBarEnabled(false);
要为所有阴暗屏幕正确设置分隔线高度,您必须在dp中设置它,但默认数字“5”以像素(px)解释。
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
有关形状和插入可绘制资源的详细信息,请使用Android文档Drawable resources
答案 3 :(得分:1)
您应该尝试从Android的默认主题派生主题,将其分配到您的首选项屏幕(尽管他们说2.x版本上存在一个错误,阻止您这样做,除非您按照here所述进行解决),并覆盖其中一个样式的android:dividerPadding
属性。
我无法确切地告诉你哪种风格,你必须深入研究,这里是android的styles.xml以供参考,这里是一个例子how to override ListView appearance in a theme