但是, 移动开发的原则是,页面尽量不要显示不必要的信息,不要太多跳转,不要太多的弹框等等
首先来看我们要实现的效果


下面来看看它的原理,点击数据时,实际上是将放数据的那一层视图的布局参数改变,所以
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="45.0dp"
android:orientation="horizontal"
android:padding="10.0dp" >
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="类似新闻摘要" />
</LinearLayout>
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)了,这点以前还没意识到,这里也提醒自己要刨根问
到底,知其然,还要知其所以然。
我的博客其它文章列表
http://my.oschina.net/helu