2011-02-15 66 views
7

我從代碼構建UI並可成功添加ProgressBar小部件,但無法將小部件的尺寸更改爲我需要的值,它始終保持默認大小(大約50dp)。我試過了下面的代碼;更改在運行時添加的ProgressBar的寬度

ProgressBar progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 
    progressBar.setMinimumHeight(20); 
    progressBar.setMinimumWidth(100); 

我也嘗試設置progressBar LayoutParams,但再次沒有,我試過在另一個佈局中包裝小部件,但仍然不是運氣。

任何人都可以幫忙,因爲我不知道該怎麼做?如果有使用XML的解決方案,它可以工作,但我必須在運行時設置維度和位置。


For Progress XML我使用了以下內容。

<ProgressBar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="10dp" 
     android:indeterminateOnly="false" 
     android:progressDrawable="@android:drawable/progress_horizontal" 
     android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
     android:maxWidth="1000dp" 
    /> 

然後膨脹它的代碼如下。這是我們一直在討論的內容。

LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ProgressBar progressBar = (ProgressBar)layoutInflater.inflate(R.layout.progress_bar, null); 
    progressBar.setMinimumHeight(10); 
    progressBar.setMinimumWidth(200); 
    progressBar.setLayoutParams(new RelativeLayout.LayoutParams(200, 10); 

    progressBar.setMax(100); 
    progressBar.setProgress(getScrollBarValue()); 
    progressBar.setIndeterminate(isIndeterminate()); 
    progressBar.getLayoutParams().width = 200; 
    progressBar.invalidate(); 
+0

我想解決的辦法是複製小部件的源代碼並實現缺少的方法。似乎一個瘋狂的解決方案,必須有辦法做到這一點。 – Snowwire 2011-02-16 20:22:02

+0

只需確認:您正在尋找酒吧風格,而不是微調風格?找出樣式/形狀的定義位置並複製和調整它們可能就足夠了。 – sstn 2011-02-17 01:08:41

回答

9

R.layout.activity包括這樣的:

<ProgressBar 
     android:id="@+id/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true" 
     android:visibility="visible" 
     style="@android:style/Widget.ProgressBar.Large.Inverse" 
/> 

然後代碼:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    ProgressBar bar = (ProgressBar)findViewById(R.id.progress); 
    bar.getLayoutParams().height = 500; 
    bar.invalidate(); 
} 

到invalidate()方法的調用是作爲重要的是當視圖重新繪製以考慮這些更改。雖然不直觀,但確實可以通過批量更改實現更好的性能。

+0

我嘗試了你建議的方法,但它對大小沒有任何影響。 – Snowwire 2011-02-16 20:20:52

0

還有minWidth/minHeight/maxWidth/maxHeight參數,但是(我認爲)它們只能通過XML或通過樣式/主題來設置。

否則,您可以從XML擴充ProgressBar視圖。

0

所以,你需要定義自己的風格進度條:

<style name="SmallProgressBar" parent="android:Widget.ProgressBar"> 
    <item name="android:minHeight">10dip</item> 
    <item name="android:maxHeight">35dip</item> 
</style> 

在這裏,你可以設置進度條以及酷炫的功能的最小和最大高度和寬度。

<ProgressBar 
    android:id="@+id/custom_edit_text_progress_bar" 
    style="@style/SmallProgressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:visibility="visible"/> 

當你吹你的進度條,你

getLayoutParams().height = 25 

getLayoutParams().width = 25 

進度條,並設置高度:現在

,你在你的XML佈局樣式設置和寬度。

注意: 您不能超出您在樣式中定義的高度和寬度。

相關問題