有没有办法在首选项屏幕的底部添加一个按钮,并在滚动时使它们正常工作?
我正在尝试创建一个只有一个关于,联系和合法选项的首选项屏幕,所有这些选项在单击时只显示单独页面中的文本模糊和图标,没有shared preferences或任何内容.
我无法理解层次结构以显示文本.我希望这个流程是:settings -> about -> the about text
目前我有这个,它给了我类别和选项,但我不知道该怎么做才能显示新文本.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Info">
<Preference android:title="About"/>
</PreferenceCategory>
...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我不知道使用什么选项来将可点击进入textview.
我想更改android偏好片段中的文本颜色.我目前正在使用自定义主题来更改复选框图像,背景,onClick突出显示,这一切都很有效...除了文本颜色.我不想使用默认主题,我想拥有自己的主题,所以它看起来我想要的只是改变文本颜色,有人可以帮助.
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="selectedTextStyle">
<item name="android:textSize">18sp</item>
</style>
<style name="buttonTextStyle">
<item name="android:textSize">20sp</item>
</style>
<style name="PreferencesTheme" >
<item name="android:windowBackground">@drawable/lists_background</item>
<item name="android:listViewStyle">@style/listViewPrefs</item>
<item name="android:checkboxStyle">@style/MyCheckbox</item>
</style>
<style name="MyTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/black</item>
</style>
<style name="listViewPrefs" parent="@android:Widget.ListView">
<item name="android:listSelector">@layout/list_selector_master</item>
<item name="android:textAppearance">@style/MyTextAppearance</item>
</style>
<style name="MyCheckbox" parent="android:Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
表现:
<activity
android:name="com.package.SettingsActivity"
android:theme="@style/PreferencesTheme"
android:configChanges="keyboard|orientation" >
</activity>
Run Code Online (Sandbox Code Playgroud)
活动:
import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as …Run Code Online (Sandbox Code Playgroud) 我的要求
注意:我需要支持Android API 15及更高版本.
在我的PreferenceFragment中,我正在将PreferenceScreen动态添加到PreferenceCategory.
PreferenceScreen as = mgr.createPreferenceScreen(context);
as.setTitle(name);
myCategory.addPreference(as);
Run Code Online (Sandbox Code Playgroud)
当设置活动呈现时,这些PreferenceScreens仅在其行的标题中呈现,请参见下图.

我想自定义此行中显示的内容.理想情况下,我希望在下面有一个摘要标题,标题/摘要左侧的图标和右侧的某些行上的图标.请参阅下面的模型图像.

PreferenceScreen.setWidgetLayoutResource(int widgetLayoutResId)
我知道我可以使用"setWidgetLayoutResource"在我的设置活动中使用以下代码在行布局的右侧添加一个图标(以及带有"setSummary"的摘要)
PreferenceScreen as = mgr.createPreferenceScreen(context);
as.setTitle(name);
as.setSummary(summary);
as.setWidgetLayoutResource(R.layout.as_widget);
myCategory.addPreference(as);
Run Code Online (Sandbox Code Playgroud)
其中"as_widget.xml"是
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_favorite"/>
Run Code Online (Sandbox Code Playgroud)
这将产生如下的UI

这让我更接近我想要的但仍然不完全是我想要的(错过了行开头的图标).
PreferenceScreen.setLayoutResource(int layoutResId)
我相信如果我使用它,那么我可以控制整行的渲染.我在stackoverflow上看过这个例子,比如
根据我的理解,您指定的布局文件必须具有以下内容
然而,当我尝试这样做时,Android Studio突出显示"@ + android:id/summary",错误为"无法解析符号'@ + android:id/summary'.当应用程序运行时,我的行呈现为完全空白.
我的java是
PreferenceScreen as = mgr.createPreferenceScreen(context);
as.setTitle(name);
as.setSummary(summary);
as.setLayoutResource(R.layout.as_row_layout);
myCategory.addPreference(as);
Run Code Online (Sandbox Code Playgroud)
我的布局是
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/widget_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize">
<ImageView
android:id="@+id/icon1"
android:src="@drawable/ic_action_email" …Run Code Online (Sandbox Code Playgroud) 我用这个Settings Activity模板在android studio中创建了一个新的活动.创建后,我无法在任何地方找到活动的布局文件.我在哪里可以找到布局文件?如果Settings Activity模板没有布局文件,我该如何更改其内容?
Android studio还创建了一个名为的新文件夹xml,这与设置活动有什么关系吗?
我想在PreferenceScreen中使用textview,它是一个更长的文本,解释了一些特定的设置.如果我在某些版本上使用summary或title属性,它会被奇怪地格式化,无法正确显示等等(文本相当长).
因此我发现使用textview是最好的,是否可以创建自定义设置元素?
我正在尝试添加图像ListPreference,但我实现了这一点,但在Android API等级15或更高版本上它无效.我做错了什么?我在2.2和2.3.3上测试过这段代码,一切正常!这是我的代码.
private void addSummary(Drawable d, Spannable sp) {
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(Const.IMAGE_ANCHOR);
builder.append(" ");
builder.append(sp);
setTextColor(builder);
ImageSpan imageSpan = new ImageSpan(d);
int end = Const.IMAGE_ANCHOR.length();
builder.setSpan(imageSpan, 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
listPreference.setSummary(builder);
}
Run Code Online (Sandbox Code Playgroud) 我想自定义我的EditTextPreference,所以我TextView在我的EditTextPreference.
这是我的代码:
<EditTextPreference
android:key="alert_planed_edittext_preference"
android:title="@string/alert_planed_edittext_preference"
android:summary="@string/alert_planed_summary_edittext_preference"
android:dialogTitle="@string/alert_planed_dialog_title_edittext_preference" />
Run Code Online (Sandbox Code Playgroud)
这就是我在我的应用程序中得到的:

我想自定义我的 EditTextPreference,这就是我想要的:

我想在右边添加数字,我可以这样做吗?
当我点击我得到这个对话框:

我希望用户只能选择数字,我该怎么做?
编辑:我找到了第二个问题的解决方案:
<EditTextPreference
android:key="alert_planed_edittext_preference"
android:title="@string/alert_planed_edittext_preference"
android:summary="@string/alert_planed_summary_edittext_preference"
android:dialogTitle="@string/alert_planed_dialog_title_edittext_preference"
android:numeric="integer" />
Run Code Online (Sandbox Code Playgroud)