Pregunta

he hecho una preferencia personalizado (es decir, una preferencia con un diseño personalizado), que está representada en la lista de preferencias de un PreferenceActivity.

El diseño se crea en el código. El problema es que la fuente de la TextView creada en código es algo diferente de la fuente preferencia estándar de Android.

Así que la solución sería aplicar los atributos de estilo de la preferencia del androide a mi TextView. Los estilos respectivos deben ser preferenceScreenStyle o preferenceStyle (no estoy seguro)

Mi problema es que no puedo encontrar la manera de lectura a los atributos de estilo estándar de Android, por lo que podría ponerlos en el código.

¿Fue útil?

Solución

Tengo el mismo problema, pero me fijo hacia fuera para algunos dispositivos móviles, HTC Saphire y Samsung Galaxy S, pero los problemas I'have con mi HTC Desire HD. Se puede ver el estilo estándar de preferencia en android_SDK_resurces / diseño / preference.xml. Hay los márgenes, tamaños de texto, ....

Otros consejos

Disculpas por la necro, pero yo no era capaz de encontrar esta respuesta sobre la cuestión acerca de la preferencia de estilo. Finalmente encontré la respuesta: la preferencia por defecto ahora utiliza la layout/preference_material. Se puede ver y otras disposiciones más específicas en la fuente androide aquí . Copiado a continuación sólo en caso de que el enlace se rompe:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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="?attr/listPreferredItemHeightSmall"
    android:gravity="center_vertical"
    android:paddingStart="?attr/listPreferredItemPaddingStart"
    android:paddingEnd="?attr/listPreferredItemPaddingEnd"
    android:background="?attr/activatedBackgroundIndicator"
    android:clipToPadding="false">
    <LinearLayout
        android:id="@+id/icon_frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="-4dp"
        android:minWidth="60dp"
        android:gravity="start|center_vertical"
        android:orientation="horizontal"
        android:paddingEnd="12dp"
        android:paddingTop="4dp"
        android:paddingBottom="4dp">
        <com.android.internal.widget.PreferenceImageView
            android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxWidth="48dp"
            android:maxHeight="48dp" />
    </LinearLayout>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingTop="16dp"
        android:paddingBottom="16dp">
        <TextView android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textAppearance="?attr/textAppearanceListItem"
            android:ellipsize="marquee" />
        <TextView android:id="@+id/summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/title"
            android:layout_alignStart="@id/title"
            android:textAppearance="?attr/textAppearanceListItemSecondary"
            android:textColor="?attr/textColorSecondary"
            android:maxLines="10"
            android:ellipsize="end" />
    </RelativeLayout>
    <!-- Preference should place its actual preference widget here. -->
    <LinearLayout android:id="@+id/widget_frame"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="end|center_vertical"
        android:paddingStart="16dp"
        android:orientation="vertical" />
</LinearLayout>

Me las he arreglado para resolver este recurso mediante la sustitución de la disposición de las preferencias personalizadas actual con los recursos de diseño utilizado por una preferencia estándar como por ejemplo EditTextPreference Aquí está un ejemplo de código, nota que TimePreference es la preferencia personalizado.

    TimePreference wake_time = (TimePreference)findPreference("wake_time");
    EditTextPreference exercise = (EditTextPreference)findPreference("exercise");
    int r = exercise.getLayoutResource();
    wake_time.setLayoutResource(r);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top