Search code examples
androidcheckboxpreference

custom checkbox in checkboxPreference - summaryOn & summaryOf


I would like to change a default checkboxPreference layout a bit. I use answers from other similar question but still there is one thing that does not work.

I've got:

<CheckBoxPreference
 android:key="@string/pref_acceptableads"
 android:summaryOff="@string/pref_acceptableads_summary_off"
 android:summaryOn="@string/pref_acceptableads_summary_on"
 android:title="@string/pref_acceptableads_title"
 android:widgetLayout="@layout/checkbox_layout" />

and:

<?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"
android:orientation="horizontal" >

<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" />

<CheckBox
        android:id="@+id/checkbox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"/>        

</LinearLayout>

Unfortunately in this way my summaryOn and summaryOf does not work. Nothing happens but "tick" in checkbox appears. When I use an Image instead of checkbox it works fine - clicking image cause change of summary. Why it does not work with checkbox? And what should I do to restore default behaviour?


Solution

  • It is necessary to add lines:

    android:focusable="false"
    android:clickable="false"
    

    to Checkbox item in custom layout xml file.