Android偏好 - 设置自定义背景?

时间:2013-12-22 17:13:42

标签: android background preference

我有一个小问题。我想在我的应用程序中启用/禁用一些首选项,具体取决于我的应用程序的TRIAL / PRO版本。

当我禁用某些Preference并且它变灰时,我想添加一些图标或资源来通知用户这是PRO功能。

例如,我想看看我的偏好(非常简单的丑陋示例,但我在30秒内完成):

enter image description here

如何做这样的事情?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用主题:

在你的清单中:

    <!-- Let Preferences have their own theme -->
    <activity
        android:name="com.example.app.ACTIVITY_Prefs"
        android:theme="@style/Theme.APP.Prefs"
    />

然后,您必须创建名为APP.Prefs

的主题

<强> [编辑]

为首选项提供自己的布局:

在您的res / layout文件夹中,添加一个新布局(随意进行修改) 我打电话给我 prefs.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:paddingStart="16dp"
    android:paddingEnd="?android:attr/scrollbarSize"
    >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minWidth="16dp"
        android:gravity="center"
        android:orientation="horizontal"
        >
        <ImageView
            android:id="@+android:id/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
        />
    </LinearLayout>
    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:layout_weight="1"
        >
        <TextView
            android:id="@+android:id/displayTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textStyle="bold"
            android:ellipsize="marquee"
            android:fadingEdge="horizontal"
        />
        <TextView
            android:id="@+android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textStyle="bold"
            android:ellipsize="marquee"
            android:fadingEdge="horizontal"
        />
        <TextView
            android:id="@+android:id/summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@android:id/title"
            android:layout_alignStart="@android:id/title"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="?android:attr/textColorSecondary"
            android:shadowColor="@color/white"
            android:shadowDx="1"
            android:shadowDy="1"
            android:shadowRadius="1"
            android:maxLines="4"
        />
    </RelativeLayout>
    <!-- Preference should place its actual preference widget here. -->
    <LinearLayout
        android:id="@+android:id/widget_frame"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minWidth="48dp"
        android:gravity="center"
        android:orientation="vertical"
    />
</LinearLayout>

请注意,我使用的是 res / values / colors.xml

中定义的自己的颜色

现在,在您的首选项文件中(我的是res / xml / prefs.xml):

您要自定义的每个首选项都必须分配该布局 (或者其他一些,如果你想要每种偏好类型或不同的颜色 所以)

        android:layout="@layout/prefs"

如果您想更改小部件图标(或分配丢失的小图标):

        android:widgetLayout="@layout/arr_dn"

(这是一个包含drawable的布局)

答案 1 :(得分:0)

您可以为列表项目设置自定义布局,包括文本和图片(如您所示),并根据应用的版本(试用版或专业版)切换图片的可见性。

以下是创建自定义列表视图的示例

http://www.vogella.com/articles/AndroidListView/article.html