سؤال

لقد قدمت تفضيلًا مخصصًا (أي تفضيل مع تخطيط مخصص) والذي يتم عرضه في قائمة التفضيلات من أ PreferenceActivity.

يتم إنشاء التصميم في الكود. تكمن المشكلة في أن خط عرض TextView الذي تم إنشاؤه في الكود يبدو مختلفًا إلى حد ما عن خط التفضيل القياسي لنظام Android.

وبالتالي فإن الحل هو تطبيق سمات النمط لتفضيلات Android على بلدي TextView. يجب أن تكون الأساليب المعنية تفضيلات creenstyle أو تفضيل (لست متأكدا).

مشكلتي هي أنه لا يمكنني معرفة كيفية قراءة سمات النمط القياسية لـ Android ، حتى أتمكن من ضبطها في التعليمات البرمجية.

هل كانت مفيدة؟

المحلول

لدي نفس المشكلة ولكني قمت بإصلاحها لبعض الأجهزة المحمولة ، HTC Saphire و Samsung Galaxy S ، لكنني أولي مشاكل مع HTC Desire HD. يمكنك رؤية نمط التفضيل القياسي في Android_SDK_ResUrces/Layout/Tperfect.xml. هناك الهوامش ، أحجام النص ، ....

نصائح أخرى

أعتذر عن Necro لكنني لم أتمكن من العثور على هذه الإجابة على أي سؤال حول تصميم التفضيل. لقد وجدت الإجابة أخيرًا: التفضيل الافتراضي يستخدم الآن layout/preference_material. يمكنك رؤيته وغيرها من التخطيطات الأكثر تحديدًا في مصدر Android هنا. تم نسخه أدناه فقط في حالة تعطل الرابط:

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

لقد تمكنت من حل هذا من خلال استبدال مورد تخطيط التفضيلات الحالية مع مورد تخطيط يستخدمه تفضيل قياسي مثل EditTextPreference على سبيل المثال هنا مثال على رمز ، لاحظ أن TimePreference هو التفضيل المخصص.

    TimePreference wake_time = (TimePreference)findPreference("wake_time");
    EditTextPreference exercise = (EditTextPreference)findPreference("exercise");
    int r = exercise.getLayoutResource();
    wake_time.setLayoutResource(r);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top