2011-02-15 35 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布局样式设置和宽度。

注意: 您不能超出您在样式中定义的高度和宽度。