当前位置: 首页 > 面试题库 >

Android设置自定义首选项布局

马奇略
2023-03-14
问题内容

我正在研究Android项目。我有一个prefs.xml代码,像这样

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

        <Preference
            android:key="pref_name_color_picker"
            android:title="Colour"
            android:summary="Colour of the name"
            android:defaultValue="#FFFFFF"
            android:layout="@layout/custom_name_setting_layout" />
    </PreferenceCategory>


</PreferenceScreen>

而且我需要自定义首选项布局。我创造了;

custom_name_setting_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:paddingRight="?android:attr/scrollbarSize">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:layout_marginRight="6dip"
        android:layout_marginTop="6dip"
        android:layout_marginBottom="6dip"
        android:layout_weight="1">

        <TextView
            android:id="@+android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceLarge"
            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_alignLeft="@android:id/title"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:maxLines="2" />

        <ImageView
            android:id="@+id/ivNameTextColor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="32dp"
            android:minWidth="32dp"
            android:layout_alignParentRight="true" />

    </RelativeLayout>

</LinearLayout>

并编写一个SettingActivity.java

public class SettingActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
    int color = 0xffffff00;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);


       LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.custom_name_setting_layout, null);

        ImageView ivNameTextColor = (ImageView) row.findViewById(R.id.ivNameTextColor);
        ivNameTextColor.setBackgroundColor(Color.RED);
    }
}

我的问题是;我写了setBackgroundColor方法,但是没有用。不起作用的意思是,该程序正在运行而没有错误(例如NullReferenceException,没有错误)。但是背景颜色仍然没有改变。

我不知道为什么 我怎么解决这个问题?谢谢


问题答案:

显然,如果您要对颜色进行硬编码,则可以在XML中进行编码:

android:background="@android:color/red"

如果您想在代码中执行此操作,那么不幸的是,它比看起来更棘手。您不能只设置首选项视图的颜色,onCreate()因为首选项视图存储在列表中,并在滚动列表时动态创建和回收。

创建视图时,需要设置背景颜色。为此,您需要实现一个自定义首选项类并重写getView()

public class CustomColorPreference extends Preference
{
    int backgroundColor = Color.BLACK;

    public CustomColorPreference(Context context) {
        super(context);
    }

    public CustomColorPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setCustomBackgroundColor(int color)
    {
        backgroundColor = color;
    }

    @Override
    public View getView(View convertView, ViewGroup parent)
    {
        View v = super.getView(convertView, parent);

        // v.setBackgroundColor(backgroundColor); // set background color of whole view
        ImageView ivNameTextColor = (ImageView)v.findViewById(R.id.ivNameTextColor);
        ivNameTextColor.setBackgroundColor(backgroundColor);

        return v;
    }
}

更改XML以使用CustomColorPreference该类:

<com.example.yourapp.CustomColorPreference
        android:key="pref_name_color_picker"
        android:title="Colour"
        android:summary="Colour of the name"
        android:defaultValue="#FFFFFF"
        android:layout="@layout/custom_name_setting_layout" />

然后,您onCreate可以CustomColorPreference使用public方法获取并为其设置颜色setCustomBackgroundColor()

CustomColorPreference picker = (CustomColorPreference)findPreference("pref_name_color_picker");
picker.setCustomBackgroundColor(Color.RED);


 类似资料:
  • 我目前正在尝试自定义首选项部分的颜色。但我不知道该怎么做。 在我的应用程序中,我有两个主题:黑暗主题和光明主题。这是用户选择的一个选项。在我的主要活动中,我设置了用户选择的主题。 在我使用 attr 定义要显示的颜色之后。 当前列表首选项: 代码:style.xml 就像我说的,我已经试过解决办法了。我该怎么办? 非常感谢托马斯 编辑我将preferenceActivity更改为preferenc

  • 关于首选项 首选项是关于您希望 Illustrator 如何工作的选项,包括显示、工具、标尺单位和导出信息。您的首选项存储在名为 “AIPrefs”(Windows) 或 “Adobe Illustrator Prefs”(Mac OS) 的文件中,每次您启动 Illustrator 时它也随之启动。要恢复 Illustrator 的默认设置,您可以删除或重命名首选项文件并重新启动 Illustr

  • 我是Android编程的新手,首先我想用SharedPreays做一个简单的选项菜单演示。我已经创建了基本的结构,但是我不知道如何将OnPreancceClickListener附加到Preation。尽管如此,我可以使用onSharedPreancceChanged方法,但是没有其他事件侦听器。(再次,我是初学者,所以我不知道为什么会这样。) 我已经阅读了有关创建菜单步骤的文档:https://

  • 本文向大家介绍android-studio 自定义VM选项,包括了android-studio 自定义VM选项的使用技巧和注意事项,需要的朋友参考一下 示例 vmoptions通过从Android Studio工具栏中选择“帮助”>“编辑自定义VM选项”,可以使用自己的个人设置覆盖默认设置。这将创建一个本地副本,您可以自由编辑它。 或者,您可以vmoptions使用下面给出的路径直接编辑默认值。请

  • 我开始认为我的问题是我的偏好没有正确完成,这就是为什么我无法访问tem。以下是我的偏好: Java: 这是我对设置菜单的调用: 因此,任何帮助将不胜感激!我正在尝试访问这些首选项,但无法访问。它似乎很好地拯救了他们。我能够测试和运行代码,更改pref并保存它们的状态。但是,当我尝试访问它们时,我不能...以下是我用来尝试访问它们的代码: 编辑:我已将其更改为如下调用,无论设置如何,它仍然是“你好,

  • 微页面 (微页面相当于自定义模板,适合有店铺主页自由搭建的基础功底商家使用;如果没有美工也不用担心,可以直接选择非上述模版,选出一个适合你的行业风格的模版,根据你需要替换的内容来制作店铺主页。)