2011-08-17 25 views
8

我有一些PreferenceCheckBoxes的PreferenceScreen。我想更改标题和摘要的textColor和textSize,并勾选和取消选中CheckBox的图像。所以我使用android:layout来改变这个属性。带自己的布局的CheckBoxPreference

我ChceckBoxPreference:

<CheckBoxPreference 
    android:layout="@layout/preference_checkbox" 
    android:key="temp" 
    android:title="@string/title" 
    android:summary="@string/summary" 
    android:defaultValue="true" 
/> 

当我使用android:widgetLayout它看起来很奇怪。这是我preference_checkbox.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="10dp" 
> 
<TextView 
    android:id="@+android:id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/gray" 
    android:textSize="20sp"  
    /> 
<TextView 
    android:id="@+android:id/summary" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/gray" 
    android:textSize="14sp" 
    /> 
</LinearLayout> 
<CheckBox 
    android:id="@+android:id/checkbox" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="10dp" 
/> 
</RelativeLayout>  

冠军ID @+android:id/title和总结与@+android:id/summary都呈现正确的价值观。但是,尽管缺省值和编号为@+android:id/checkbox的复选框无法正常工作。它没有显示正确的值,我无法更改保存在首选项中的值。 不使用任何布局,我可以通过触摸整个CheckBoxPreference来更改复选框的值。但现在(使用我的布局),只需触摸此复选框即可更改复选框的值。 如何以正确的方式为所有功能制作CheckBoxPreference的布局?

+2

见http://stackoverflow.com/questions/3569412/customize-check-box-preference,设置可点击和可聚焦为false,您的复选框 – devisnik

+0

@devisnik的OP正在谈论改变整个布局背后的偏好,你指出的解决方案只是关于复选框 –

+0

devisnik的答案应该是正确的。需要这些设置来改变偏好值。 – user1608385

回答

24

尝试以此为preference_checkbox.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2006 The Android Open Source Project Licensed under the 
Apache License, Version 2.0 (the "License"); you may not use this file except 
in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
Unless required by applicable law or agreed to in writing, software distributed 
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
the specific language governing permissions and limitations under the License. --> 

<!-- Layout for a Preference in a PreferenceActivity. The Preference is able 
to place a specific widget for its particular type in the "widget_frame" 
layout. --> 
<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"> 

<RelativeLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_marginLeft="15dip" 
    android:layout_marginRight="6dip" 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:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" 
     android:ellipsize="marquee" android:fadingEdge="horizontal" 
     android:textColor="#FF0000" /> 

    <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:maxLines="4" /> 

</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:gravity="center_vertical" android:orientation="vertical" /> 

</LinearLayout> 
+1

此代码片段的来源:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/preference.xml(当然是增加了颜色自定义) –

+0

@ashish你发布这个答案已经很长时间了,但我被困在某个地方。我在我的xml中出现错误,提示“Can not resolve symbol @ + android:id/title”。你能帮我找出相同的原因。 – Anjani

+0

花了几个小时找到这个答案非常感谢。 –