2013-12-01 5 views
0

Я разрабатываю приложение для Android. Есть шесть основных переменных long, которые отображаются на экране в любое время. Они непрерывно увеличиваются с использованием таймера в отдельном потоке. Пользователь может наблюдать, как эти переменные увеличиваются на экране. Каждая из этих переменных имеет максимальную сумму.Программно заданная ширина представления

Что бы я хотел сделать, это нарисовать «индикатор выполнения» для каждой из этих переменных. На данный момент я использую View с сплошным красным цветом.

Пожалуйста, смотрите ниже прототипа:

enter image description here

Красная полоса слева будет представлять собой переменную, которая достигла это максимальная сумма, в то время как другие являются пустыми и бар имеет ширину 0, так и невидимо. Каждая переменная помещается в RelativeLayout (который представляет собой один раздел), который затем помещается в LinearLayout. В будущем я, возможно, придется добавить/удалить некоторые - поэтому решение не должно опираться на жестко заданные расположения макета.

Вопрос в том, как я могу программно установить ширину этих «индикаторов выполнения» в коде, а не жестко кодировать координаты компоновки любой из переменных?

ответ

0

Вы должны проверить http://developer.android.com/reference/android/widget/ProgressBar.html ProgressBar. Это облегчит вам отображение прогресса.

В случае LinearLayout (и любой ViewGroup по этому вопросу) вы можете создать свой собственный LayoutParams программно:

LayoutParams params = new LayoutParams(width,height) // in px 
yourLinearLayout.setLayoutParams(params); 

вам нужно будет отливать LayoutParams в соответствии ViewGroup типа.

+0

Извините, но я не понимаю, как это работает. Я не знаю, что представляют переменные 'width' и' height' - ширина/высота представления? Я не знаю, как получить эту информацию. –

+0

'LinearLayout',' RelativeLayout' и т. Д. - это все 'ViewGroup', которые содержат другие представления как дочерние элементы, такие как' ImageView' для изображений или TextView для текстов. Эти 'ViewGroup' также могут содержать другие' ViewGroups' в качестве дочерних элементов, например 'LinearLayout' в' LinearLayout' или в вашем случае 'RelativeLayout' в' LinearLayout'. Мы используем 'LayoutParams', чтобы описать и рассказать родительским представлениям о том, насколько широка и насколько высоки наши представления (следовательно,' width' и 'height' как параметры). Как только мы укажем измерение, мы применяем их к 'View', мы хотим изменить размер - это в вашем случае ** yourLinearLayout ** – Toshe

+0

Извините, я думаю, вы неправильно поняли - я не хочу изменять размер' LinearLayout' - Я хочу изменить размер только 'View' внутри него, который действует как индикатор выполнения. –

0

Нормальный путь будет использовать ProgressBar, но если вы хотите использовать свой собственный вид, используйте этот:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(withInPx, heightInPx); 
yourView.setLayoutParams(lp); 

Это подразумевает, что вы используете LinearLayout, но вы должны изменить, что если вы используете другой (т. е. RelativeLayout)

heightInPx будет исправлен в вашем случае, но withInPx вы можете варьироваться в зависимости от прогресса.

+0

Извините, но я не понимаю, как это работает. Я не знаю, что представляют переменные 'widthInPx' и' heightInPx' - ширина/высота представления? Я не знаю, как получить эту информацию. –

Смежные вопросы