TextView的查看更多效果

先上图

TextView的查看更多效果_第1张图片

这个效果,开始想着用onclick事件,不行,后来想着用网上的一些方法,效果也没有。

然后查了查资料,用自定义控件吧。

上代码

public class CollapsibleTextView extends LinearLayout implements OnClickListener{
	 private static final int DEFAULT_MAX_LINE_COUNT = 3;

	    private static final int COLLAPSIBLE_STATE_NONE = 0;
	    private static final int COLLAPSIBLE_STATE_SHRINKUP = 1;
	    private static final int COLLAPSIBLE_STATE_SPREAD = 2;

	    private TextView desc;
	    private TextView descOp;

	    private String shrinkup;
	    private String spread;
	    private int mState;
	    private boolean flag;
	public CollapsibleTextView(Context context) {
		 this(context, null);
	}
	public CollapsibleTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		 //        两种定义形式
//        shrinkup = context.getString(R.string.desc_shrinkup);
//        spread = context.getString(R.string.desc_spread);
        shrinkup="收起";
        spread="查看更多";
        View view = inflate(context, R.layout.collapsible_textview, this);
        view.setPadding(0, -1, 0, 0);
        desc = (TextView) view.findViewById(R.id.desc_tv);
        descOp = (TextView) view.findViewById(R.id.desc_op_tv);
        descOp.setOnClickListener(this);
	}
	public CollapsibleTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}
	@Override
	public void onClick(View v) {
		flag = false;
        requestLayout();
	}

	/**
	 1. 
	 2. 对外提供暴漏的方法,为文本提供数据
	 3. @param charSequence  文本内容是什么
	 4. @param bufferType
	 */
	    public final void setDesc(CharSequence charSequence, BufferType bufferType) {
	        desc.setText(charSequence, bufferType);
	        mState = COLLAPSIBLE_STATE_SPREAD;
	        requestLayout();
	    }

	    @Override
	    protected void onLayout(boolean changed, int l, int t, int r, int b) {
	        super.onLayout(changed, l, t, r, b);
	        if (!flag) {
	            flag = true;
	            if (desc.getLineCount() <= DEFAULT_MAX_LINE_COUNT) {
	                mState = COLLAPSIBLE_STATE_NONE;
	                descOp.setVisibility(View.GONE);
	                desc.setMaxLines(DEFAULT_MAX_LINE_COUNT + 1);
	            } else {
	                post(new InnerRunnable());
	            }
	        }
	    }

	    class InnerRunnable implements Runnable {
	        @Override
	        public void run() {
	            if (mState == COLLAPSIBLE_STATE_SPREAD) {
	                desc.setMaxLines(DEFAULT_MAX_LINE_COUNT);
	                descOp.setVisibility(View.VISIBLE);
	                descOp.setText(spread);
	                mState = COLLAPSIBLE_STATE_SHRINKUP;
	            } else if (mState == COLLAPSIBLE_STATE_SHRINKUP) {
	                desc.setMaxLines(Integer.MAX_VALUE);
	                descOp.setVisibility(View.VISIBLE);
	                descOp.setText(shrinkup);
	                mState = COLLAPSIBLE_STATE_SPREAD;
	            }
	        }
	    }
}

布局



    


    





需要用到的地方的代码

 
					
					    
					
                   
                


功能代码


collapsibletextview = (CollapsibleTextView)findViewById(R.id.collapsibletextview);
if (mydata.remark != null && !"".equals(mydata.remark)) {
			collapsibletextview.setDesc(mydata.remark, BufferType.NORMAL);
			
		} else {
			collapsibletextview.setDesc("暂无个人介绍", BufferType.NORMAL);
		}



你可能感兴趣的:(android自定义控件)