Изменить ширину ProgressBar, добавленного во время выполнения - PullRequest
7 голосов
/ 15 февраля 2011

Я создаю пользовательский интерфейс из кода и могу успешно добавлять виджеты ProgressBar, однако я не могу изменить размеры виджета на значения, которые мне нужны, он всегда остается по умолчанию (около 50 dp).Я попробовал следующий код:

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

Я также попытался установить ProgressBar LayoutParams, но снова ничего, и я попытался обернуть виджет в другой макет, но все же не удача.1005 * Может кто-нибудь помочь, так как я не вижу, как это сделать?Если есть решение, использующее 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 ]

9 голосов
/ 15 февраля 2011

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 голосов
/ 28 марта 2016

Итак, вам нужно определить свой собственный стиль для индикатора выполнения:

<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

для индикатора выполнения и установки высоты и ширины.

Примечание: Вы не можете превышать высоту и ширину, которые вы определили в стилях.

0 голосов
/ 15 февраля 2011

Есть также параметры minWidth / minHeight / maxWidth / maxHeight, но (я думаю) они могут быть установлены только через XML или через стиль / тему.

В противном случае вы можете накачать представление ProgressBar из XML.

...