android自定义实例化,如何使用android:layout属性实例化自定义首选项的布局

实际上我find了另一个解决方案。 您仍然可以使用Preferenceability:

只需添加一个调用自定义布局的片段并添加它的类。 但是你会在Manifest中收到警告:(你可以忽略或修复)

[res](AndroidManifest.xml)

android:name=".SettingsActivity_CUSTOMLAYOUT1"

“YOURPACKAGE.SettingsActivity_CUSTOMLAYOUT1不公开”

它只能从您的SettingsActivity中调用,因此您可以忽略它

要么

如果你想从外面调用这个Activity,只需为它创建一个自己的类,并将其命名为SettingsActivity_CUSTOMLAYOUT1.java。

码:

[java](SettingsActivity.java)

public class SettingsActivity extends AppCompatPreferenceActivity { private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object value) { String stringValue = value.toString(); if (preference instanceof ListPreference) { ListPreference listPreference = (ListPreference) preference; int index = listPreference.findIndexOfValue(stringValue); preference.setSummary( index >= 0 ? listPreference.getEntries()[index] : null); } else if (preference instanceof RingtonePreference) { if (TextUtils.isEmpty(stringValue)) { preference.setSummary(R.string.pref_ringtone_silent); } else { Ringtone ringtone = RingtoneManager.getRingtone( preference.getContext(), Uri.parse(stringValue)); if (ringtone == null) { preference.setSummary(null); } else { String name = ringtone.getTitle(preference.getContext()); preference.setSummary(name); } } } else { preference.setSummary(stringValue); } return true; } }; private static boolean isXLargeTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; } private static void bindPreferenceSummaryToValue(Preference preference) { preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, PreferenceManager .getDefaultSharedPreferences(preference.getContext()) .getString(preference.getKey(), "")); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); } private void setupActionBar() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } @Override public boolean onIsMultiPane() { return isXLargeTablet(this); } @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void onBuildHeaders(Listtarget) { loadHeadersFromResource(R.xml.pref_headers, target); } protected boolean isValidFragment(String fragmentName) { return PreferenceFragment.class.getName().equals(fragmentName) || YOURFRAGMENT1.class.getName().equals(fragmentName) || YOURFRAGMENT2.class.getName().equals(fragmentName) || CUSTOMLAYOUT1.class.getName().equals(fragmentName) //... Add Fragments } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class YOURFRAGMENT1 extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.YOURFRAGMENTXML1); setHasOptionsMenu(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class YOURFRAGMENT2 extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_private_data); setHasOptionsMenu(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class FRAGMENTFORCUSTOMLAYOUT1 extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startActivity(new Intent(getActivity(), SettingsActivity.class)); startActivity(new Intent(getActivity(), CUSTOMLAYOUT1.class)); setHasOptionsMenu(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } } } class SettingsActivity_CUSTOMLAYOUT1 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.CUSTOMLAYOUT1); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } }

[xml](pref_headers.xml)

[布局](CUSTOMLAYOUT1.xml)

别忘了添加Manifest。

[res](AndroidManifest.xml)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值