2015-07-30 4 views
-1

У меня есть ListView, что каждая строка показывает разные проценты.Изменить ширину элемента ListView (строки)?

и я хочу изменить одну из внутренних макетов ширины (внутри надутых counterView) для этой цели.

, например:

, если первый элемент значение listview составляет 10%, то ширина устанавливается в 10px тоже

, если второй элемент значение составляет 50%, то ширина изменение 50px слишком

что-то подобное :
enter image description here

Как это сделать?

Я попробовал эти коды, но он не работает и width не меняется: (я определил match_parent ширину для layout внутри XML, и я хочу изменить его программно)

public class MyAdapterScores extends BaseAdapter { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.scores_layout,null,true); 

      //I wanna change 'relativeLayoutRightSqure' width inside 'scores_layout' 
      View layout = convertView.findViewById(R.id.relativeLayoutRightSqure); 
      ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) layout.getLayoutParams(); 
      //variable precentage has value     
      p.width=precentage ; 
      layout.requestLayout(); 

ответ

0

Я нашел проблему!

проблема была в определении android:layout_toRightOf и android:layout_toLeftOf для моего внутреннего counterView вид макета одновременно, который вызывает настройку ширины, не работает!

( Упомянутый выше код (relativeLayoutRightSqure):

View layout = convertView.findViewById(R.id.relativeLayoutRightSqure); 

)

0

Вы не можете просто установите ширину в процентах, я думаю. Я не тестировал это решение, но попробую! Может работать!

Одним из решений может быть, чтобы установить ширину в процентах от общей ширины дисплея, может быть:

WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int layoutWidth = size.x * (percentage/100) 

Затем вы можете использовать эту переменную «layoutWidth», чтобы установить ширину на макете вы хотите.

+0

спасибо за ответ, но я не хочу, чтобы установить ширину, как percentage.The проблема в том, что я могу» t изменить ширину вообще, я хочу найти решение, чтобы изменить ширину на любое значение –

+0

Возможно, вы можете использовать 'setLayout (ширина, высота)'? –

+0

Когда я получаю начальную ширину на 'layout.getWidth()', ширина равна 0, я думаю, что мне нужно изменить ширину где-то еще (кроме 'getView()'), но я не знаю, где! –

0

пожалуйста, используйте следующий код

RelativeLayout layout = convertView.findViewById(R.id.relativeLayoutRightSqure); 
    RelativeLayout.LayoutParams param=layout.getLayoutParams(); 
    param.width=precentage ; 
    layout.setLayoutParams(param); 
+0

Или вы можете установить индикатор выполнения как элемент списка и установить процентный показатель для выполнения, чтобы вам не нужно было регулировать ширину полосы выполнения макета. –

+0

Я проверил ваше решение, но оно не работает, оно ничего не вызывает.Я тоже не хочу использовать индикатор выполнения, мне нужны разные размеры ширины для разных строк ListView в моем приложении. Спасибо вам любым способом. –

+0

. Вы отметили, что разрешение на прогресс. –

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