Domanda

Ho fatto una preferenza su misura (vale a dire una preferenza con un layout personalizzato), che appare nella lista delle preferenze di un PreferenceActivity.

Il layout è stato creato nel codice. Il problema è che il tipo di carattere del TextView creato nel codice sembra un po 'diverso da quello del carattere preferenza di standard di Android.

Quindi la soluzione sarebbe quella di applicare gli attributi di stile di Android preferenza alla mia TextView. I rispettivi stili dovrebbero essere preferenceScreenStyle o preferenceStyle (non sono sicuro)

Il mio problema è che non riesco a capire come leggere di Android attributi di stile standard, in modo ho potuto impostare nel codice.

È stato utile?

Soluzione

Ho lo stesso problema, ma ho riparato fuori per alcuni dispositivi mobili, HTC Saphire e Samsung Galaxy S, ma i problemi con la mia i'have HTC Desire HD. Potete vedere lo stile preferenza standard android_SDK_resurces / layout / preference.xml. Ci sono i margini, le dimensioni del testo, ....

Altri suggerimenti

Ci scusiamo per il necro, ma non ero in grado di trovare questa risposta su qualsiasi questione quindi circa preferenza styling. Ho finalmente trovato la risposta: la preferenza di default utilizza ora la layout/preference_material. Lo si può vedere e altri layout più specifici alla fonte Android qui . Copiato seguito solo nel caso che puntano pause:

<?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>

sono riuscito a risolvere questo sostituendo risorsa layout corrente di preferenza personalizzato con risorse layout utilizzato da una preferenza standard come per esempio EditTextPreference Ecco un esempio di codice, si noti che TimePreference è la preferenza personalizzato.

    TimePreference wake_time = (TimePreference)findPreference("wake_time");
    EditTextPreference exercise = (EditTextPreference)findPreference("exercise");
    int r = exercise.getLayoutResource();
    wake_time.setLayoutResource(r);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top