2011-08-17 61 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

花了幾個小時找到這個答案非常感謝。 –