MainActivity.java
public class MainActivity extends Activity{ private boolean isShow = false; private String str = "开源中国Android开发专区开源中国Android开发专区开源中国Android开发专区开源中国Android开发专区开源中国Android开发专区开源中国Android开发专区开源中国"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.tv, new String[] { "类似新闻摘要" }); ListView listview = new ListView(this); listview.setAdapter(adapter); setContentView(listview); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { final TextView tv = (TextView) view.findViewById(R.id.tv); final LinearLayout layout = (LinearLayout) view.findViewById(R.id.layout); layout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isShow) { tv.setText("类似新闻摘要"); layout.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 67));// 注意:这里的单位变成了px,其中px } else { tv.setText(str); layout.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT)); } isShow = !isShow; } }); } }); }}这里要注意两点: 第一:已经在注释里说了,new LayoutParams(width,height)中的参数单位要注意转换; 第二:也是很重要的一点,以前都没意识到,就是在layout.setLayoutParams(layoutParams)的时候,其中的layoutParams 一定是其组件(在这里是layout)的父视图的布局方式,所以 这里是new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT),如果你是在LinearLayout里面加一个TextView,那么 就是new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)了,这点以前还没意识到,这里也提醒自己要刨根问 到底,知其然,还要知其所以然。 我的博客其它文章列表