【问题标题】:CheckBoxPreference with own layout具有自己布局的 CheckBoxPreference
【发布时间】:2011-10-29 00:06:26
【问题描述】:

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

我的 CheckBoxPreference:

<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 的摘要显示正确的值。然而,尽管有默认值和 id @+android:id/checkbox 的复选框无法正常工作。它没有显示正确的值,我无法更改偏好中保存的值。 在不使用任何布局的情况下,我可以通过触摸整个 CheckBoxPreference 来更改复选框的值。但是现在(使用我的布局)我只能通过触摸此复选框来更改复选框的值。 如何使用所有功能正确地为 CheckBoxPreference 进行布局?

【问题讨论】:

  • 查看stackoverflow.com/questions/3569412/…,将您的复选框的可点击和可聚焦设置为false
  • @devisnik OP 正在谈论更改首选项背后的整个布局,您指出的解决方案仅与复选框有关
  • 德维斯尼克的答案应该是正确的。需要这些设置才能更改首选项值。

标签: android android-preferences checkboxpreference


【解决方案1】:

试试这个作为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>

【讨论】:

  • 这个sn-p的来源:android.googlesource.com/platform/frameworks/base/+/refs/heads/…(当然是ashish添加了颜色定制)
  • @ashish 您发布此答案已经很长时间了,但我被困在某个地方。我的 xml 中出现错误,提示“无法解析符号 @+android:id/title”。你能帮我找出同样的原因吗..
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
相关资源
最近更新 更多