更改在运行时添加的ProgressBar的宽度

时间:2011-02-15 18:45:49

标签: android layout progress-bar width

我正在从代码构建UI并且可以成功添加ProgressBar小部件,但是我无法将小部件的尺寸更改为我需要的值,它始终保持默认大小(大约50dp)。我试过以下代码;

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

我也尝试过设置progressBar LayoutParams,但是我没有试过,我尝试用另一种布局包装小部件,但仍然没有运气。

任何人都可以提供帮助,因为我看不到怎么做?如果有使用XML的解决方案,它可以工作,但我必须在运行时设置维度和位置。


对于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();

3 个答案:

答案 0 :(得分: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()方法的调用很重要,因为重绘视图时需要考虑更改。虽然不直观,但它确实可以通过批量更改来提高性能。

答案 1 :(得分:0)

还有minWidth / minHeight / maxWidth / maxHeight参数,但(我认为)它们只能通过XML或样式/主题设置。

否则,您可以从XML中扩展ProgressBar视图。

答案 2 :(得分:0)

因此,您需要为进度条定义自己的样式:

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

在这里,您可以设置进度条的最小和最大高度和宽度以及其他很酷的功能。

现在,您设置了xml布局样式:

<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

表示进度条并设置高度和宽度。

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