优先权摘要仅允许2行.如果我想在摘要中显示3行或更多行.我能怎么做 ?
我想获取用于在我的PreferenceActivity中显示特定首选项的View实例,因此我可以修改其属性,例如:
public class SettingsActivity extends PreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
Preference pref = findPreference("key");
pref.getView().setVisibility(View.GONE);
//not necessarily setVisibility, i hope you get my point
}
}
Run Code Online (Sandbox Code Playgroud)
我只找到了这个方法: getView(View convertView,ViewGroup parent).但是对我来说似乎很困惑,如果我想获得我的偏好视图,我需要提供视图和viewGroup作为参数?
有人可以解释如何使用此方法,或指向另一种方法从我的Preference实例获取View.
PS:如果可能的话,我宁愿不扩展Preference类,但如果有必要,我不介意
我有一个Preference启用同步适配器,并在切换时需要一段时间来实际工作.因此,当用户单击时Preference,我会关闭AsyncTask来完成工作.在此期间,我禁用Preference并替换复选框与不确定ProgressBar.我所有这一切都是通过一个涉及一个子类的黑客CheckBoxPreference来覆盖它的ProgressBar顶部CheckBox.呸.
该android:widgetLayout属性似乎就是为此而设计的.我应该可以android:widgetLayout用来指定默认值的替换CheckBox.所述替换将实现Checkable并使用a ViewSwitcher在a CheckBox和a 之间适当地切换ProgressBar.
唯一的问题是CheckBoxPreference,在其onBindView()方法中,似乎忽略了可能android:widgetLayout使用的可能性.它明确地这样做:
View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);
Run Code Online (Sandbox Code Playgroud)
这实际上使得无法交换自定义Checkable通道android:widgetLayout并使其实际工作.
这是一个疏忽/错误CheckBoxPreference,还是我误解了android:widgetLayout?是否有更清洁的预期方式来做我想做的事情?
如果要在某个layout.xml文件中访问自定义视图,可以使用以下两个选项:
<package.name.MyView android:layout_width= ... /><view class="package.name.OuterClass$MyView" android:layout_width= ... /> 现在我想在一个内部做同样的事情<PreferenceScreen>.第一种方法效果很好,但我想将所有自定义Preference类放在我的PreferenceActivity中.我试过<Preference class="package.name.OuterClass$MyPreference" ... />(也用'.'而不是'$')<package.name.OuterClass.MyPreference ... />,但都失败了.
有没有人有想法?
android inner-classes preference preferencescreen android-xml
在我的应用程序中,一些设置可能会在PreferenceActivity未打开时更改,而我遇到的问题addPreferencesFromResource是调用onCreate,所以说,我打开PreferenceActivity,然后从那里转到另一个屏幕,然后执行一些更改设置,然后按后退键返回PreferenceActivity,然后在布局上没有改变某些设置.
那么,如何在不重复布局的情况下调用所有Preferences每次onResume(或onStart())重新加载?
android reload preference preferenceactivity sharedpreferences
我可以通过android:layout属性为首选项设置适当的布局.举个例子
<Preference
android:key="friction"
android:title="@string/friction"
android:layout="@layout/friction_fragment"
android:shouldDisableView="true"
android:defaultValue="30"
android:enabled="true"
android:selectable="true"
android:summary="Bite friction">
</Preference>
Run Code Online (Sandbox Code Playgroud)
布局在哪里
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:text="@string/friction" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"></TextView>
<SeekBar android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/sbFriction"></SeekBar>
<TextView android:text="@string/friction_little" android:id="@+id/txtSummary" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<Button android:text="Button" android:id="@+id/btnFriction" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我可以在PreferenceActivity中获取OnCreate中的视图
Preference fric = (Preference)this.findPreference("friction");
View v = fric.getView(null, null);
SeekBar sbFriction = (SeekBar)v.findViewById(R.id.sbFriction);
sbFriction.setOnSeekBarChangeListener(this);
Button btnFric = (Button) v.findViewById(R.id.btnFriction);
btnFric.setOnClickListener(m_onClick);
Run Code Online (Sandbox Code Playgroud)
但是我设定的这些事件听众并没有被解雇.我如何捕获这些事件,例如 - 单击按钮.编辑.不,它没有发动任何异常.这是更详细的代码
public class SettingsActivity extends PreferenceActivity implements OnPreferenceChangeListener, OnSeekBarChangeListener
{
private TextView …Run Code Online (Sandbox Code Playgroud) 我有下面的偏好项目样本
<CheckBoxPreference
android:key="chkSound"
android:summary="Sound is Off"
android:title="Sound" />
Run Code Online (Sandbox Code Playgroud)
我在res/values中使用主题来更改Summary文本颜色
<style name="ThemeDarkText">
<item name="android:textColor">#000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在代码中我写了这一行
setTheme(R.style.ThemeDarkText);
Run Code Online (Sandbox Code Playgroud)
它在Android 2.1中运行良好,但当我尝试在不同的操作系统上运行它(从Android 4.0开始)它没有改变摘要文本颜色只是标题颜色.. !!
有帮助吗?
我已经回到了第四位而且我无法得到它.我正在使用首选项片段设置我的设置.我可以让设置工作,我甚至可以在进行更改时获得更新的"摘要".但是,如果我离开设置屏幕并返回到它,则摘要将恢复为默认文本.所以问题是,当使用edittext首选项时.如何更新摘要,以便显示用户更改设置的内容并使其在关闭屏幕和应用程序时保持不变?在这种情况下,当我的用户更改mse_ip时,摘要将更改为"MSE IP xxxx",但是一旦我离开设置屏幕并返回,它将返回到"0.0.0.0",这是@ string/mseip设置的内容.
的preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="mse_ip"
android:title="MSE IP"
android:summary="@string/mseip"
android:defaultValue="0.0.0.0"
android:dialogTitle="IP Address for mse" />
<EditTextPreference
android:key="mse_username"
android:title="Username"
android:summary="MSE Username %s"
android:defaultValue="Admin"
android:dialogTitle="Username for mse" />
<EditTextPreference
android:key="mse_password"
android:title="MSE Password"
android:password="true"
android:summary="******"
android:defaultValue="Admin"
android:dialogTitle="Password for mse" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
preferencesfragment
package com.hmkcode.android;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
/*public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// …Run Code Online (Sandbox Code Playgroud) 我看过这篇有用的帖子:
SharedPreferences.onSharedPreferenceChangeListener未被一致地调用
但是我没有运气.我正在尝试创建一个在服务中运行的OnSharedPreferenceChangeListener.一切都正确实现,但听众并不总是被触发.
public MyServiceOne extends Service {
public SharedPreferences mSharedPreferences;
// Listener defined by anonymous inner class.
public OnSharedPreferenceChangeListener mListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d("debug", "A preference has been changed");
}
};
@Override
public void onCreate() {
mSharedPreferences = getSharedPreferences(MySharedPreferences.NAME, Context.MODE_PRIVATE);
mSharedPreferences.registerOnSharedPreferenceChangeListener(mListener);
}
@Override
public void onDestroy() {
super.onDestroy();
mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mListener);
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
问题源于我没有提及的事实.我正在运行两个服务,当在MyService2中进行共享首选项更改时,不会触发任何内容.在清单中,我定义了在不同进程中运行的服务.有没有办法让这项工作?
我的应用程序支持2.2到Android版本.问题是,对于"设置"页面,我现在正在使用PreferenceActivity.但是,正如您所知,它的许多方法都已弃用,它们告诉我使用基于片段的设置.但是,我发现如果我切换到使用PreferenceFragment和Fragment Activity,我就不能再支持2.2和2.3了,因为在API级别11以上支持PreferenceFragment.即使我使用支持库,它也不包含PreferenceFragment!我不知道为什么Google没有在支持库中添加PreferenceFragment.
无论如何,我认为我仍然可以使用旧的PreferenceActivity,但如果它说它已被弃用,为什么它不支持其支持库中的替代品呢?
任何建议表示赞赏!