2017-03-22 68 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