怎么实现TextView的展开与收缩

 我来答
匿名用户
2016-11-18
展开全部
代码展示:
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_public"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="个人简介" />
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="13dp"
android:layout_height="13dp"
android:src="@drawable/shousuo_icon26x26"/>
</LinearLayout>
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="" />
<TextView
android:id="@+id/tv_back"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- 这个是借用的TextView,用来测量实际的高度 -->
</LinearLayout>
2.MainActivity:
public class MainActivity extends Activity implements OnClickListener {
private TextView tv_content;
private TextView tv_back;//借用的TextView
private ImageView iv_arrow;//指示箭头
private int tvBackHeight;
private int tvContentHeight;
private LinearLayout ll_public;
private String str1 ="delaalg十几万看看了我问问往外跑我婆婆欺骗是色色砰砰砰索赔额咳咳额咳咳咳咳咳额咳咳咳咳及阿飞骄傲发机票傲娇佛奥放假安排阿胶片废品沙盘上开发傲娇斯派莎克 啊平时架飞机阿福卡片啊技术怕咖2333dsdjof家平均法及阿飞骄傲发机票傲娇佛奥放假安排阿胶片废品沙盘上开发";
// private String str1 ="12132777我不知道";
// private String str1 ="sjsjsjf海兽祭祀减肥法加水烧开是看看是萨克斯开始看科室科室kwwhissfak事实就是及附加费及说实在的增加字段看";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//设置textview的内容:
tv_content.setText(str1);
tv_back.setText(str1);
//测量tv_content的高度
ViewTreeObserver vto1 = tv_content.getViewTreeObserver();
vto1.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
tvContentHeight = tv_content.getHeight();
//获得高度之后,移除监听
tv_content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//Toast.makeText(MainActivity.this, "tv_contentheight:"+tvContentHeight, 0).show();
}
});
//测量tv_back 的高度
ViewTreeObserver vto = tv_back.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
tvBackHeight = tv_back.getHeight();
tv_back.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//Toast.makeText(MainActivity.this, "back的height:"+tvBackHeight, 0).show();
//比较高度:
if(tvBackHeight>tvContentHeight){
//说明有展开的内容:
iv_arrow.setVisibility(View.VISIBLE);
//默认是关闭状态:
tv_content.setTag(true);
//说明ll_public 是可以点击的
ll_public.setClickable(true);
}else{
iv_arrow.setVisibility(View.GONE);
//说明ll_public是不可以点击的
ll_public.setClickable(false);
}
tv_back.setVisibility(View.GONE);
}
});
}
private void initView() {
tv_content = (TextView) findViewById(R.id.tv_content);
tv_back = (TextView) findViewById(R.id.tv_back);
iv_arrow = (ImageView) findViewById(R.id.iv_arrow);
ll_public = (LinearLayout) findViewById(R.id.ll_public);
ll_public.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ll_public:
boolean tag = (boolean) tv_content.getTag();
if(tag){
//如果是true,点击则展开:
iv_arrow.setImageResource(R.drawable.zhankai_icon26x26);
tv_content.setTag(false);
tv_content.setMaxLines(Integer.MAX_VALUE);
}else{
iv_arrow.setImageResource(R.drawable.shousuo_icon26x26);
tv_content.setTag(true);
tv_content.setMaxLines(2);
}
break;
default:
break;
}
}
}
以上就可以根据不同的内容,实现TextView的展开与伸缩,指示箭头的显示与隐藏。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式