android 查看内容详细信息无须页面跳转解决方案及setLayoutParams注意事项

    android开发中肯定会牵扯到一些查看数据的详细信息操作,一般的都做是从列表页面选择跳转到详细信息页面
    
    但是, 移动开发的原则是,页面尽量不要显示不必要的信息,不要太多跳转,不要太多的弹框等等
    
    首先来看我们要实现的效果

        android 查看内容详细信息无须页面跳转解决方案及setLayoutParams注意事项    =====>      android 查看内容详细信息无须页面跳转解决方案及setLayoutParams注意事项
    
    
    下面来看看它的原理,点击数据时,实际上是将放数据的那一层视图的布局参数改变,所以
    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

你可能感兴趣的:(android,setLayoutParams)