2017-03-22 66 views
0

过去几个小时我试图通过代码设置一个SeekBar的宽度(它必须由配置文件设置)。我试图通过"seekBar[i].SetMinimumWidth(600);"设置它,我也想用“ShapeDrawable”要做到这一点,但它不工作,这是我的例子我是如何做的是:设置一个SeekBar以编程方式

SeekBar sb = new SeekBar(this); 
      sb.SetX(720/2); 
      sb.SetY(1280/2); 
      ShapeDrawable thumb = new ShapeDrawable(new OvalShape()); 
      thumb.SetIntrinsicHeight(64); 
      thumb.SetIntrinsicWidth(600); 
      sb.SetThumb(thumb); 
      sb.SetBackgroundColor(new Color(255, 255, 255)); 

我还想着某种风格,但我不确定这是否可以这样做。如何通过代码设置seekbar的宽度?

我还必须设置SeekBar的最小值和最大值,但我不知道如何使用代码设置这些合适的值。我知道,我可以简单地将其锁定,如果statment这样的:

sb.ProgressChanged += (object sender, SeekBar.ProgressChangedEventArgs e) => 
       { 
        if (e.FromUser) 
        { 
         if (e.Progress < localSliderMax && e.Progress > localSliderMin) 
         //SomeWork 
        } 
       }; 

但是如果我需要例如最小值-1,或最高255?它不会像这样工作。任何解决方案如何做到这一点?

回答

0

如何通过代码设置seekbar的宽度?

您可以设置它,例如像这样:

sb.LayoutParameters = new ViewGroup.LayoutParams(900, ViewGroup.LayoutParams.WrapContent); 

900在这里的代码是SeekBar宽度。有关控件布局的更多信息,请参阅ViewGroup.LayoutParams Class

但是,如果我将需要例如最小值a -1或最大255?

您不能将最小值定义为-1。它是0

要设置255,可以将该值设置为您SeekBarMax财产,这里是一个示例:

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 

    RelativeLayout mlayout = new RelativeLayout(this) 
    { 
     LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent) 
    }; 

    SeekBar sb = new SeekBar(this) 
    { 
     LayoutParameters = new ViewGroup.LayoutParams(900, ViewGroup.LayoutParams.WrapContent), 
     Max = 255, 
    }; 

    mlayout.AddView(sb); 
    SetContentView(mlayout); 
    sb.ProgressChanged += Sb_ProgressChanged; 
} 

private void Sb_ProgressChanged(object sender, SeekBar.ProgressChangedEventArgs e) 
{ 
    var progress = e.Progress; 
    System.Diagnostics.Debug.WriteLine(progress); 
} 

款式的SeekBar,因为那里是太多possiblities,我不知道你到底需要什么,因此我只设置了WidthMax的值,这些值来自您的问题中指定的代码。

+0

这几乎所有我需要的。谢谢! – Salin