Android: Stile Preferenze
-
26-09-2019 - |
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.
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);