以编程方式设置 SeekBar

Setting up a SeekBar programmatically

在过去的几个小时里,我试图通过代码设置 SeekBar 的宽度(它必须由配置文件设置)。我试图通过 "seekBar[i].SetMinimumWidth(600);" 来设置它,我也试图用 "ShapeDrawable" 来设置它,但它没有用,这是我如何做的例子:

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 的最小值和最大值,但我不知道如何使用代码设置这些属性。我知道,我可以通过这样的 if 语句简单地锁定它:

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

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

How do I set a width of a seekbar by code?

你可以这样设置,例如:

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

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

But what if i will need for example a min value a -1, or max 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设置样式,因为可能性太多,我不知道你到底需要什么,所以我只设置了WidthMax的值您的问题中指定了其背后的代码。