2010-09-28 16 views
5

Bir PreferenceActivity tercihleri ​​listesinde görüntülenen özel bir tercih (yani, özel mizanpajlı bir tercih) yaptım.Android: Preference Style

Düzen, kodla oluşturulur. Sorun, kodda oluşturulmuş TextView yazı tipinin, Android'in standart tercih fontundan biraz farklı görünmesidir.

Bu nedenle, çözüm benim için tercih ettiğim telefonun stil niteliklerini TextView benim. İlgili stiller preferenceScreenStyle veya preferenceStyle olmalıdır (emin değilim).

Sorunum, android standart stil niteliklerini nasıl okuyacağımı anlayamıyorum, bu yüzden bunları kod olarak ayarlayabilirim.

cevap

6

Aynı sorunu yaşadım ama HTC Mobile ve Samsung Galaxy S bazı mobil cihazlar için düzelttim ama HTC Desire HD cihazımda sorun yaşıyorum. Android_SDK_resurces/layout/preference.xml dosyasında standart tercih stilini görebilirsiniz. Kenar boşlukları, metin boyutları, ....

1

Geçerli özel tercihin düzen kaynağını EditTextPreference gibi standart bir tercih tarafından kullanılan mizanpaj kaynağıyla değiştirerek çözmeyi başardım. İşte bir kod örneği, TimePreference'ın özel tercih olduğunu unutmayın.

TimePreference wake_time = (TimePreference)findPreference("wake_time"); 
    EditTextPreference exercise = (EditTextPreference)findPreference("exercise"); 
    int r = exercise.getLayoutResource(); 
    wake_time.setLayoutResource(r); 
3

Necro'dan ötürü özür dilerim, ancak bu yanıtı tercih stiliyle ilgili herhangi bir SO sorusunda bulamamıştım. Sonunda cevabı buldum: varsayılan tercih şimdi layout/preference_material kullanıyor. Android kaynağı here'da ve diğer daha spesifik düzenleri görebilirsiniz. Aşağıdaki bağlantı kopmaları durumunda kopyalanır:

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