seekbar - Android SeekBarPreference -


i'm trying implement seekbarpreference class using http://android-journey.blogspot.com/2010/01/for-almost-any-application-we-need-to.html tutorial relativelayout. first problem textview preferencetext isn't showing @ all. second problem bar can't slided in regular preferences (like media volume bar)?

public class seekbarpreference extends preference implements     onseekbarchangelistener {  public static int maximum    = 100; public static int interval   = 5; private float oldvalue = 25; private textview indicator;  public seekbarpreference(context context) {     super(context); }  public seekbarpreference(context context, attributeset attrs) {     super(context, attrs); }  public seekbarpreference(context context, attributeset attrs, int defstyle) {     super(context, attrs, defstyle); }  @override protected view oncreateview(viewgroup parent) {      float scale = getcontext().getresources().getdisplaymetrics().density;      relativelayout layout = new relativelayout(getcontext());      relativelayout.layoutparams textparams = new relativelayout.layoutparams(             relativelayout.layoutparams.wrap_content,             relativelayout.layoutparams.wrap_content);      relativelayout.layoutparams sbarparams = new relativelayout.layoutparams(             math.round(scale * 160),             relativelayout.layoutparams.wrap_content);      relativelayout.layoutparams indparams = new relativelayout.layoutparams(             relativelayout.layoutparams.wrap_content,             relativelayout.layoutparams.wrap_content);      textview preferencetext = new textview(getcontext());     preferencetext.setid(0);     preferencetext.settext(gettitle());     preferencetext.settextsize(18);     preferencetext.settypeface(typeface.sans_serif, typeface.bold);       seekbar sbar = new seekbar(getcontext());     sbar.setid(1);     sbar.setmax(maximum);     sbar.setprogress((int)this.oldvalue);     sbar.setonseekbarchangelistener(this);      this.indicator = new textview(getcontext());     this.indicator.settextsize(12);     this.indicator.settypeface(typeface.monospace, typeface.italic);     this.indicator.settext("" + sbar.getprogress());      textparams.addrule(relativelayout.align_parent_left);     sbarparams.addrule(relativelayout.right_of, preferencetext.getid());     indparams.setmargins(math.round(20*scale), 0, 0, 0);     indparams.addrule(relativelayout.right_of, sbar.getid());      preferencetext.setlayoutparams(textparams);     sbar.setlayoutparams(sbarparams);     this.indicator.setlayoutparams(indparams);     layout.addview(preferencetext);     layout.addview(this.indicator);     layout.addview(sbar);     layout.setid(android.r.id.widget_frame);      return layout; }  @override public void onprogresschanged(seekbar seekbar, int progress,         boolean fromuser) {     progress = math.round(((float) progress)/interval) * interval;      if(!callchangelistener(progress)) {         seekbar.setprogress((int) this.oldvalue);         return;     }      seekbar.setprogress(progress);     this.oldvalue = progress;     this.indicator.settext("" + progress);     updatepreference(progress);      notifychanged(); }  @override public void onstarttrackingtouch(seekbar seekbar) { }  @override public void onstoptrackingtouch(seekbar seekbar) { }  @override protected object ongetdefaultvalue(typedarray ta, int index) {     int dvalue = ta.getint(index, 25);      return validatevalue(dvalue); }  @override protected void onsetinitialvalue(boolean restorevalue,         object defaultvalue) {     int temp = restorevalue ? getpersistedint(25) : (integer)defaultvalue;     if(!restorevalue)         persistint(temp);      this.oldvalue = temp; }  private int validatevalue(int value) {     if(value > maximum)          value = maximum;     else if (value < 0)         value = 0;     else if (value % interval != 0)         value = math.round(((float) value)/interval) * interval;      return value; }  private void updatepreference(int newvalue) {     sharedpreferences.editor editor = geteditor();     editor.putint(getkey(), newvalue);     editor.commit(); } 

}

the problem sliding here due notifychange() call. interfering sliding somehow. working on similar widget because not dialog approach.

as promised here solution added open source project:

i have written seekbarpreference class embeded widget inside preferences activity instead of popup dialog. can download jar file from:

http://aniqroid.sileria.com/

the class documentation , usage here: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/seekbarpreference.html

also not forget checkout handy companion class auto show summary when change seekbar: http://aniqroid.sileria.com/doc/api/com/sileria/android/event/prefsseekbarlistener.html


Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -