Android Settings UI -
Android Settings UI -
i looking build similar settings ui of scheme android. want few checkboxpreferences, switchpreferences, edittextpreferences on launch of application , when user selects 1 preference open fragment not able figure out.
i have referred settings guide insists on using preference header. while displaying headers there unlikely overhead facing of displaying texts in turn load fragments.
for example,
my preference header :
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" > <!-- these settings headers used on tablets. --> <header android:fragment="${packagename}.${activityclass}$generalpreferencefragment" android:title="@string/pref_header_general" /> <header android:fragment="${packagename}.${activityclass}$notificationpreferencefragment" android:title="@string/pref_header_notifications" /> <header android:fragment="${packagename}.${activityclass}$datasyncpreferencefragment" android:title="@string/pref_header_data_sync" /> </preference-headers>
and load actual data, having utilize it. actual info have checkboxes , edittexts.
it great if gave insights on this. of great help if launch actual fragment info on loading of screen. improve if have command of fragment phone call , phone call other fragments when fragment item selected.
to create custom preference headers, switches , such, need extend preferenceactivity headers android docs describe , override preferenceactivity.setlistadapter create own list adapter, creates custom views. made pastebin code actual android settings activity help out. http://pastebin.com/rhsndgcq
@override public void onbuildheaders(list<header> headers) { loadheadersfromresource(r.xml.settings_headers, headers); updateheaderlist(headers); } @override public void setlistadapter(listadapter adapter) { if (adapter == null) { super.setlistadapter(null); } else { super.setlistadapter(new headeradapter(this, getheaders(), mauthenticatorhelper)); } } private static class headeradapter extends arrayadapter<header> { static final int header_type_category = 0; static final int header_type_normal = 1; static final int header_type_switch = 2; private static final int header_type_count = header_type_switch + 1; private final wifienabler mwifienabler; private final bluetoothenabler mbluetoothenabler; private final profileenabler mprofileenabler; private authenticatorhelper mauthhelper; private static class headerviewholder { imageview icon; textview title; textview summary; switch switch_; } private layoutinflater minflater; static int getheadertype(header header) { if (header.fragment == null && header.intent == null) { homecoming header_type_category; } else if (header.id == r.id.wifi_settings || header.id == r.id.bluetooth_settings || header.id == r.id.profiles_settings) { homecoming header_type_switch; } else { homecoming header_type_normal; } } @override public int getitemviewtype(int position) { header header = getitem(position); homecoming getheadertype(header); } @override public boolean areallitemsenabled() { homecoming false; // because of categories } @override public boolean isenabled(int position) { homecoming getitemviewtype(position) != header_type_category; } @override public int getviewtypecount() { homecoming header_type_count; } @override public boolean hasstableids() { homecoming true; } public headeradapter(context context, list<header> objects, authenticatorhelper authenticatorhelper) { super(context, 0, objects); mauthhelper = authenticatorhelper; minflater = (layoutinflater)context.getsystemservice(context.layout_inflater_service); // temp switches provided placeholder until adapter replaces these actual // switches inflated layouts. must done before adapter set in super mwifienabler = new wifienabler(context, new switch(context)); mbluetoothenabler = new bluetoothenabler(context, new switch(context)); mprofileenabler = new profileenabler(context, null, new switch(context)); } @override public view getview(int position, view convertview, viewgroup parent) { headerviewholder holder; header header = getitem(position); int headertype = getheadertype(header); view view = null; if (convertview == null || headertype == header_type_switch) { holder = new headerviewholder(); switch (headertype) { case header_type_category: view = new textview(getcontext(), null, android.r.attr.listseparatortextviewstyle); holder.title = (textview) view; break; case header_type_switch: view = minflater.inflate(r.layout.preference_header_switch_item, parent, false); holder.icon = (imageview) view.findviewbyid(r.id.icon); holder.title = (textview) view.findviewbyid(com.android.internal.r.id.title); holder.summary = (textview) view.findviewbyid(com.android.internal.r.id.summary); holder.switch_ = (switch) view.findviewbyid(r.id.switchwidget); break; case header_type_normal: view = minflater.inflate( r.layout.preference_header_item, parent, false); holder.icon = (imageview) view.findviewbyid(r.id.icon); holder.title = (textview) view.findviewbyid(com.android.internal.r.id.title); holder.summary = (textview) view.findviewbyid(com.android.internal.r.id.summary); break; } view.settag(holder); } else { view = convertview; holder = (headerviewholder) view.gettag(); } // view fields must updated every time, because view may recycled switch (headertype) { case header_type_category: holder.title.settext(header.gettitle(getcontext().getresources())); break; case header_type_switch: // need different treatment if main menu had more switches if (header.id == r.id.wifi_settings) { mwifienabler.setswitch(holder.switch_); } else if (header.id == r.id.bluetooth_settings) { mbluetoothenabler.setswitch(holder.switch_); } else if (header.id == r.id.profiles_settings) { mprofileenabler.setswitch(holder.switch_); } // no break, fall through on purpose update mutual fields //$fall-through$ case header_type_normal: if (header.extras != null && header.extras.containskey(manageaccountssettings.key_account_type)) { string acctype = header.extras.getstring( manageaccountssettings.key_account_type); viewgroup.layoutparams lp = holder.icon.getlayoutparams(); lp.width = getcontext().getresources().getdimensionpixelsize( r.dimen.header_icon_width); lp.height = lp.width; holder.icon.setlayoutparams(lp); drawable icon = mauthhelper.getdrawablefortype(getcontext(), acctype); holder.icon.setimagedrawable(icon); } else { holder.icon.setimageresource(header.iconres); } holder.title.settext(header.gettitle(getcontext().getresources())); charsequence summary = header.getsummary(getcontext().getresources()); if (!textutils.isempty(summary)) { holder.summary.setvisibility(view.visible); holder.summary.settext(summary); } else { holder.summary.setvisibility(view.gone); } break; } homecoming view; } public void resume() { mwifienabler.resume(); mbluetoothenabler.resume(); mprofileenabler.resume(); } public void pause() { mwifienabler.pause(); mbluetoothenabler.pause(); mprofileenabler.pause(); } }
android android-fragments android-preferences android-fragmentactivity
Comments
Post a Comment