更改ListView项(行)的宽度?

时间:2015-07-30 07:57:13

标签: android listview android-listview width layoutparams

我有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();

3 个答案:

答案 0 :(得分: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”来设置所需布局的宽度。

答案 1 :(得分:0)

请使用以下代码

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

答案 2 :(得分:0)

我发现了问题!

问题是同时为我的内部android:layout_toRightOf布局视图定义了android:layout_toLeftOfcounterView导致设置宽度不起作用!!

( 参考上面的代码(relativeLayoutRightSqure):

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