- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
PreferenceScreen 对我来说不够好,因为我必须向 Spinner 添加项目。这些项目需要来自数据列表。
我有一个自定义的 ArrayAdapter,它会在我单击它时返回项目的名称。它返回项目中包含的数据。
我想在 ListPreference(这是 PreferenceScreen 中的微调器)中使用相同的 ArrayAdapter,但 ListPreference 不允许我使用适配器。
因此,我想在不使用实际 PreferenceScreen(和 PreferenceCategory)的情况下重新创建 PreferenceScreen(使用 PreferenceCategory)的外观
图书馆可以做到这一点吗?我还没找到。
谢谢,
蒂姆
最佳答案
我试着收集我的第一个方法——我希望我没有忘记包括一些部分(aapart 颜色定义或 statelist 可绘制对象,这是您自己制作的一项微不足道的任务)
自定义标准首选项
/res/xml/prefs.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<!-- ... -->
<PreferenceCategory android:title="@string/pref_vibrate_cat">
<CheckBoxPreference
android:persistent="true"
android:key="vibrate"
android:title="@string/pref_vibrate_title"
android:summary="@string/pref_vibrate_summ"
android:defaultValue="true"
android:layout="@layout/prefs"
/>
</PreferenceCategory>
<!-- ... -->
<!-- Just to show how to use a custom preference (you must have the corresponding java Class in your project) -->
<PreferenceCategory android:title="@string/pref_tts_cat">
<com.dergolem.abc.CLS_Prefs_Multi
android:persistent="true"
android:key="tts"
android:title="@string/pref_tts_title"
android:summary="@string/nothing"
android:dialogTitle="@string/pref_tts_dlg"
android:dialogIcon="@android:drawable/sym_action_chat"
android:entries="@array/prefs_tts_titles"
android:entryValues="@array/prefs_tts_values"
android:defaultValue="@array/prefs_tts_defaults"
android:layout="@layout/prefs"
android:widgetLayout="@layout/arr_dn"
/>
</PreferenceCategory>
<!-- ... -->
</PreferenceScreen>
/res/layout/prefs.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Layout for a visually child-like Preference in a PreferenceActivity. -->
<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_vertical"
/>
</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>
/src/ACT_Prefs
package com.dergolem.abc;
/* ---------------------------------- Imports ------------------------------- */
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.widget.ListView;
public final class ACT_Prefs // NO_UCD (use default)
extends PreferenceActivity
implements OnSharedPreferenceChangeListener
{
/* ------------------------------ Objects ------------------------------- */
private Context ctx = null;
/* ----------------------------- Overrides ------------------------------ */
// Reload the Activity on rotation.
@Override
public final void onConfigurationChanged(final Configuration cfg)
{
super.onConfigurationChanged(cfg);
reStart();
}
/*
Load the Preference Activity if the API LEvel is less than 11 or else load
the PreferenceFragment.
Needed workaround, since unfortunately Google didn't include the
PreferenceFragment in the support library
*/
@Override
public final void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ctx = getApplicationContext();
if (Build.VERSION.SDK_INT < 11)
{
createPreference_Activity();
}
else
{
createPreference_Fragment();
}
}
@Override
protected void onPause()
{
// Unregister OnSharedPreferenceChangeListener
PreferenceManager.getDefaultSharedPreferences(ctx).
unregisterOnSharedPreferenceChangeListener(this);
// Call the base method
super.onPause();
}
@Override
protected void onResume()
{
// Register OnSharedPreferenceChangeListener
PreferenceManager.getDefaultSharedPreferences(ctx).
registerOnSharedPreferenceChangeListener(this);
// Fire the base method
super.onResume();
}
/* ------------------------------ Methods ------------------------------- */
@SuppressWarnings("deprecation")
private final void createPreference_Activity()
{
// Set the Activity layout
addPreferencesFromResource(R.xml.prefs);
// Get the PreferenceScreen ListView
final ListView lvw = getListView();
// Set the horizontal separator
lvw.setDivider(getResources().getDrawable(R.drawable.list_divider));
lvw.setDividerHeight((1));
// Set the statelist selector
lvw.setSelector(R.drawable.list_item_colors);
// Remove the top and bottom fadings
lvw.setVerticalFadingEdgeEnabled(false);
}
@SuppressLint("NewApi")
private final void createPreference_Fragment()
{
// Create the fragment.
getFragmentManager().beginTransaction().replace
(android.R.id.content, new FRG_Prefs()).commit();
getFragmentManager().executePendingTransactions();
}
}
/src/FRG_Prefs
package com.dergolem.abc;
/* ---------------------------------- Imports ------------------------------- */
import android.annotation.SuppressLint;
import android.graphics.PixelFormat;
import android.preference.PreferenceFragment;
import android.view.View;
import android.widget.ListView;
@SuppressLint("NewApi")
public final class FRG_Prefs
extends PreferenceFragment
{
/* ----------------------------- Overrides ------------------------------ */
@Override
public final void onResume()
{
super.onResume();
addPreferencesFromResource(R.xml.prefs);
init();
}
@Override
public final void onStop()
{
super.onStop();
// Kill the prefence screen, so that it won't be recreated DUPLICATE.
// HORRIBLE, but it's the only way to avoid the PreferenceScreen copycat.
getActivity().finish();
}
/* ------------------------------ Methods ------------------------------- */
private final void init()
{
final View v = getView();
v.setPadding(paddingSize, 0, paddingSize, 0);
// Get the PreferenceScreen ListView
final ListView lvw = (ListView) v.findViewById(android.R.id.list);
// Set the horizontal separator
lvw.setDivider(getResources().getDrawable(R.drawable.list_divider));
lvw.setDividerHeight((1));
// Set the state selector
lvw.setSelector(R.drawable.list_item_colors);
// Remove top and bottom fading
lvw.setVerticalFadingEdgeEnabled(false);
}
}
显示我的偏好:
startActivity(new Intent(ctx, ACT_Prefs.class));
ctx 定义为
Context ctx = getApplicationContext();
因为我用的比较多,所以我一劳永逸地定义了
[编辑]
根据要求,我可以添加一个方法来制作一个Fake PreferenceScreen
。
关于android - 使普通布局看起来像 PreferenceScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352989/
#include #include #include using namespace std::chrono; int main(int arc, char* argv[]) { con
我是 opencv 的新手。当我将 sRGB png 提供给它时,我发现以下代码交换了红色和蓝色 channel 。我应该责怪哪个函数,imread 还是 fromarray? 最佳答案 是的,O
我正在使用以下代码,它缩小了每一行,并且由于某种原因整个用户界面也丢失了。我该如何解决?
它是关于以下设置的:Linux 机器、bash、adb、带有 Busybox 的嵌入式 Linux 目标系统。对于目标系统,以下适用: adb shell echo $SHELL /bin/sh ad
当我在 Android Studio 上创建一个空 fragment 时,它会生成以下代码: /** * A simple {@link Fragment} subclass. * Activit
我正在尝试从 Meteor 应用程序的服务器端发布用户的 Facebook 提要: result = Meteor.http.call 'POST', "https://graph.faceb
目前我有两个不同的查询,它们返回完全相同的结果,但是,更改从中过滤结果的参数会使它们以非常不同的方式运行。 搜索 cartography 时的结果 查询 #1: 22 行/~860 毫秒; SELEC
我已经创建了结构: typedef struct { short s; int i; struct Ss { short s; }; } S;
我想在 Java 中打印反斜杠 t。但每当我尝试时,它实际上都将它作为\t 运算符。双反斜杠不起作用。我该怎么做。 最佳答案 例如通过添加另一个反斜杠来转义反斜杠 System.out.println
我想弄清楚为什么 UIActivityViewController 发送一个稍微转换过的字符串来分享给邮件和微信。 这是我的代码: let activityViewController = UIAct
创建标准 SQLite 游标后,我将使用以下方法遍历条目: while (cursor.moveToNext()) { } 所有行都被正确处理。我读过的所有文档都表明您需要发出 moveToFirst
我正在尝试创建一个基本论坛,但在 SQL 中仅打印一行时遇到问题。这是我的 PHP: {$title}"; } } else { print "failed to reach post
我的新 div 元素 ( ) 似乎隐藏在图像后面。我键入的任何内容都显示在图像后面。我想在背景图片之后继续工作。 这是我的代码: DISPLAY
UPD。一行代码解决了问题:.lean() axplanation here 我在 Model.find(...blablabla : [ {"_id":"578763de6e8e0542195ef4
我在 Ubuntu 16.04 中安装了 Tomcat 8.0.45。我使用 let's encrypt 生成的证书启用了 HTTPS 连接器。它就像一个魅力。但是今天Tomcat无法启动HTTPS连
今天,我在一台全新安装了 Windows 7 Ultimate 64 位的新笔记本电脑上安装了 Visual Studio 2010 Professional。我非常习惯于 Visual Studio
根据 Oracle,我应该能够将 .intValue() 和 .compareTo() 之类的方法应用于 double ,但是当我编写 dbl.toString( ) 例如,在 NetBeans 中,
正在为应用程序开发一些拖放功能,虽然可以使用“重影图像”来完成很多事情,将毒品从一个地方转移到另一个地方,但它们看起来总是有点“褪色” - 因此得名鬼影。是否有可能使这些具有与原始颜色相同的深度?谢谢
我是这方面的新手,很抱歉犯了一些愚蠢的错误。快乐学习。每当我使用 URL : localhost:3000/posts/whatever 时,我都会收到无法获取错误。在你问之前,是的,那是在我将内容放
背景 这自然是合法的: let closure: (Int, Int) -> () = { print($0 + $1) } closure(1, 2) // 3 鉴于,自进化提案实现以来 SE-01
我是一名优秀的程序员,十分优秀!