您的位置:首页 > 其它

解决ScrollView嵌套ListView问题【续】

2015-12-04 17:00 387 查看
为了解决ScrollView嵌套ListView问题,看了网上的一些帖子。解决了listview只显示一行的问题,但还有一些问题未解决。

1.item中有TextView,文字多行时,显示不全

这个问题很坑,最后还是大牛点播的。问题出现的原因是获取的Item的高度是固定的,即文本只有一行,显示的Item高度是788,两行、三行,依旧是这么多。大牛告诉我,加上textview的高度就好了。自己研究了一下,还是不行。个人推测,按照上篇文章的方法,获得高度是TextView绘制前的。但我想不到怎么获取绘制后的,最后大牛给了答案,自定义TextView。目前还是不知道原理,先让他宰一次,再去套套。贴上自定义的TextView,其他的按照上篇的方法,就会正常显示。

package com.abf.view;

import android.app.Activity;
import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.util.FloatMath;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
* 根据�?��显示的string长度来计算textview高度的自定义控件
* */
public class MulTextView extends TextView{

private Context context;

public MulTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

Layout layout = getLayout();
if (layout != null) {
int height = (int)FloatMath.ceil(getMaxLineHeight(this.getText().toString()))
+ getCompoundPaddingTop() + getCompoundPaddingBottom();
int width = getMeasuredWidth();
setMeasuredDimension(width, height);
}
}

private float getMaxLineHeight(String str) {
float height = 0.0f;
float screenW = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth()-Dp2Px(context, 80);
float paddingLeft = ((LinearLayout)this.getParent()).getPaddingLeft();
float paddingReft = ((LinearLayout)this.getParent()).getPaddingRight();
//这里具体this.getPaint()要注意使用,要看你的TextView在什么位置,这个是拿TextView父控件的Padding的,为了更准确的算出换行
int line = (int) Math.ceil( (this.getPaint().measureText(str)/(screenW-paddingLeft-paddingReft)));
height = (this.getPaint().getFontMetrics().descent-this.getPaint().getFontMetrics().ascent)*line;
return height;
}

//dp转化为像�?
public int Dp2Px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
}


2.怎样在ScrollView下面在显示一个布局
跟着上面的走,直接加的话,会导致显示不出来下面的布局。个人推测,可能是ScrollView绘制是覆盖了下面的地方。解决办法是,父布局使用RelativeLayout,再进行设置。贴上布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/lightGray" >

<RelativeLayout
android:id="@+id/rl_top"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="10dp" >

<ImageView
android:id="@+id/left_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/left_arrow" />

<TextView
android:id="@+id/top_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:text="她的帖子"
android:textSize="25sp" />

<ImageView
android:id="@+id/iv_my_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/community" />
</RelativeLayout>

<LinearLayout
android:layout_alignParentBottom="true"
android:id="@+id/ll_comment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal"
android:visibility="visible" >

<EditText
android:id="@+id/et_edit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/bt_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@color/lightblue"
android:text="发布" />
</LinearLayout>

<ScrollView
android:layout_above="@id/ll_comment"
android:layout_below="@id/rl_top"
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:focusable="true"
android:scrollbars="none" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_article_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="一个可爱的我"
android:textSize="20sp" />

<include layout="@layout/lines_one" />

<LinearLayout
android:id="@+id/ll_article_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_article_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="新华社比勒陀利亚12月2日电(记者李忠发 霍小光 张川石)国家主席习近平2日在比勒陀利亚同南非总统祖马举行会谈。两国元首一致认为,中南关系面临历史性发展机遇,双方要以落实两国高层共识和《中南5-10年合作战略规划》为抓手,以中非合作论坛约翰内斯堡峰会为新起点,推动中南关系再上新台阶。"
android:textSize="18sp" />
</LinearLayout>

<include layout="@layout/lines_two" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white" >

<ImageView
android:id="@+id/iv_zan"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:src="@drawable/zan" />

<ImageView
android:id="@+id/iv_comment"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_centerInParent="true"
android:src="@drawable/coment" />

<ImageView
android:id="@+id/iv_share"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:src="@drawable/share" />
</RelativeLayout>

<include layout="@layout/lines_half" />

<ImageView
android:id="@+id/iv_is_comment"
android:layout_width="64dp"
android:layout_height="32dp"
android:layout_marginLeft="10dp"
android:src="@drawable/no_coment" />

<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@color/moccasin" />

<ListView
android:id="@+id/lv_commont"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fastScrollEnabled="false"
android:scrollbars="none" />
</LinearLayout>
</ScrollView>

</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: