如何使视图的高度动态

时间:2016-06-22 10:50:58

标签: android listview android-arrayadapter custom-cell

代码是:

View v = convertView;

LayoutInflater inflater = ((Activity) context).getLayoutInflater();
v = inflater.inflate(R.layout.newsfeed_custom_listview_facebook, parent, false);

TextView username = (TextView) v.findViewById(R.id.username);
TextView prayerTitle = (TextView) v.findViewById(R.id.prayerTitle);
TextView createdOn = (TextView) v.findViewById(R.id.createdOn);
TextView prayerMessage = (TextView) v.findViewById(R.id.prayerMessage);
ScrollView scrollView = (ScrollView) v.findViewById(R.id.scrollView);
MixedObj menuItemsBean = menuItems.get(position);
RoundedImageView img = (RoundedImageView) v.findViewById(R.id.image);

username.setText(menuItemsBean.name);
prayerTitle.setText(menuItemsBean.title);
createdOn.setText(menuItemsBean.created_on);

TextView textView = new TextView(context);


//prayerMessage.setText(menuItemsBean.message);
RelativeLayout.LayoutParams p = new 
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
 p.addRule(RelativeLayout.BELOW, R.id.image);
 textView.setLayoutParams(p);
 textView.setPadding(5, 5, 5, 5);
 textView.setTextColor(Color.parseColor("#ffffff"));
 //textView.setText(menuItemsBean.message);
String message = "please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life please God forgive me for all my mistakes i have ever done in my life end";

 message = menuItemsBean.message;
 textView.setText(message);

 ViewGroup viewGroup = (ViewGroup) v;
 viewGroup.addView(textView);

RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams)
textView.getLayoutParams();

AbsListView.LayoutParams layoutParams = (AbsListView.LayoutParams)  

viewGroup.getLayoutParams();
//layoutParams.height += ();
 return v;

我想更改listView的自定义视图的高度。 我尝试了这个,但它不起作用我希望每个单元格的高度取决于消息TextView大小。

任何人请帮助..

1 个答案:

答案 0 :(得分:0)

实现它的问题是ListView的基础知识。 从基础对象,ListView仅为所有视图调用单个大小,并使每个操作无效。对于您的任务,您需要使用自己的列表。对于前。

<强> 1) 使用多种布局:

<ScrollView>
   <LinearLayout>
      //Add in loop all your views in code above!
   </LinearLayout>
</ScrollView>

<强> 2) 使用LinkedListView:

此视图与ListView类似,但包含您添加的每个视图的链接,并且不会使它们无效。所以你可以使用它,而不仅仅是简单的ListView - 你可以在没有工件的情况下改变运行时的任何视图。在Github - LinkedListView

上查看此列表

<强>更新

使用LinkedListView,只需导入您的项目。比创建适配器

public class YourAdapter extends LinkedListView.Adapter  {

    private Context mainContext;
    private LinkedList<View> mainViewList;

    public CirclePagerAdapter (Context mainContext) {
        this.mainContext = mainContext;
        mainViewList = new LinkedList<>();
    }

    //CALL THIS TO ADD YOUR OWN VIEW
    public void addSimpleView (View v) {
        mainViewList.add(v)
        notifyDatasetChanged();
    }


    //CALL THIS TO DELETE VIEW
    public void deleteView(int index) {
        mainViewList.remove(index);
        notifyDatasetChanged();
    }

    @Override
        public View getObjectView(int position) {
        if (position < mainViewList.size())
            return mainViewList.get(position);

        return null;
    }

    @Override
    public int getObjectCount() {
        return mainViewList.size();
 }

在您的活动中创建适配器调用后!

LinkedListView listView = new LinkedListView (getContext());
LinkedListView.Adapter adapter = new MyBaseAdapter ();
listview.setViewPager(adapter);

工作得很好!