实现与ListView相似点击收缩展开内容

2017-09-25  本文已影响0人  Poison丶Carson

有的时候,根据项目的需求不同,我们会需要实现一个类似于ListView的点击收缩、点击展开,改变显示内容以及更改点击之后的字体

点击展开 点击收缩

其实需要实现这类的效果并不是很难,首先我们需要在XML布局中设置两个TextView,一个用于显示配送费的信息,一个用于显示我们点击之后的响应效果

<LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
        <TextView
              android:id="@+id/text_freigh"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_marginBottom="10dp"
              android:ellipsize="middle"
              android:maxLines="1"
              android:singleLine="false"
              tools:text="可收缩隐藏的配送范围信息"/>
        <TextView
              android:id="@+id/text_content"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_marginBottom="10dp"
              android:layout_marginRight="34dp"
              android:gravity="center"
              android:text="更多"
              android:textColor="#999"
              android:textSize="13sp"/>
</LinearLayout>

布局很简单,只是显示配送费信息的时候设置最大显示为1行,其他的根据开发的实际情况进行调整就可以了,接下来我们需要在Activity中进行设置

public class MessageActivity extend Activity implements View.OnClickListener{
    // 默认展示最大行数1行
    private static final int VIDEO_CONTENT_DESC_MAX_LINE = 1;
    // 收起状态
    private static final int SHRINK_UP_STATE = 1;
    // 展开状态
    private static final int SPREAD_STATE = 2;
    //默认为收起状态
    private static int mState = SHRINK_UP_STATE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.message);
        binding.executePendingBindings();
        binding.textContent.setOnClickListener(this);
    }
    
   @Override
    public void onClick(View v){
        switch (v.getId()) {
            case R.id.text_content:
                if (mState == SPREAD_STATE){
                    binding.textFreigh.setMaxLines(VIDEO_CONTENT_DESC_MAX_LINE);
                     binding.textFreigh.requestLayout();
                     mState = SHRINK_UP_STATE;
                     binding.textContent.setText("更多");
                }else if(mState == SHRINK_UP_STATE){
                     binding.textFreigh.setMaxLines(Integer.MAX_VALUE);
                     binding.textFreigh.requestLayout();
                     mState = SPREAD_STATE;
                     binding.textContent.setText("收起");
                }
                break;
            default:
                break;
        }
    }
}

很简单的几行代码,就将我们需要的效果完美实现了n(≧▽≦)n

上一篇下一篇

猜你喜欢

热点阅读