以编程方式设置 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,您可以将值设置为 SeekBar
的 Max
属性,示例如下:
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
设置样式,因为可能性太多,我不知道你到底需要什么,所以我只设置了Width
和Max
的值您的问题中指定了其背后的代码。
在过去的几个小时里,我试图通过代码设置 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,您可以将值设置为 SeekBar
的 Max
属性,示例如下:
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
设置样式,因为可能性太多,我不知道你到底需要什么,所以我只设置了Width
和Max
的值您的问题中指定了其背后的代码。