我正在使用Xamarin开发Android应用程序,我正在寻找一种限制Android搜索栏的解决方案,以防止用户将搜索栏向右移动(增加值)。
目前,该页面有4个搜索栏,每个搜索栏代表从“篮子”给予一个人的Apple数量(篮子在每个人之间共享)。 (A,B,C,D)
如果“basket”有任何值(basket是int类型),则用户可以移动任何滑块。例如,如果他们希望向A提供更多苹果,那么他们只需将第一个滑块向右移动即可。
如果“篮子”没有任何值,那么滑块都不应该移动。
因为有4个搜索栏(4个ppl)并且它必须同步(意味着条形图中的每个更改都必须被带入帐户,因为ppl共享相同的“篮子”)
有没有办法禁止向导栏移动到右边?
提前致谢
答案 0 :(得分:1)
这可以做到这一点吗?
seekBar.ProgressChanged += (object sender, SeekBar.ProgressChangedEventArgs e) => {
if (e.FromUser < oldValue)
{
oldValue = e.Progress;
//your stuff
}
seekBar.Progress = oldValue;
};
答案 1 :(得分:0)
因为有4个搜索栏(4个ppl)并且它必须同步(意味着条形图中的每个更改都必须被带入帐户,因为ppl共享相同的&#34;篮子&#34;)
有没有办法禁止向导栏移动到右边?
您需要在ProgressChanged
时检查总值,如果溢出,则将当前搜索栏的进度设置为最大值:
public class MainActivity : Activity
{
SeekBar sbOne, sbTwo, sbThree, sbFour;
TextView tvTotal;
int total=100;
List<SeekBar> seekbars;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
sbOne = FindViewById<SeekBar>(Resource.Id.sbOne);
sbTwo = FindViewById<SeekBar>(Resource.Id.sbTwo);
sbThree = FindViewById<SeekBar>(Resource.Id.sbThree);
sbFour = FindViewById<SeekBar>(Resource.Id.sbFour);
tvTotal = FindViewById<TextView>(Resource.Id.tbTotal);
seekbars = new List<SeekBar> { sbOne, sbTwo, sbThree, sbFour };
//register the events
for (int i = 0; i < 4; i++)
{
seekbars[i].ProgressChanged += ProgressChanged;
}
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
SeekBar sb = sender as SeekBar;
int tmp=0;
for (int i = 0; i < 4; i++)
{
tmp += seekbars[i].Progress;
}
if (tmp > total)
{
//if overflows then set current seekbar's progress to a proper value
sb.Progress-=(tmp-total);
}
}
}