滚动自定义列表视图时,TextView大小显示不同

时间:2015-10-23 11:08:05

标签: android listview scroll text-size

在Listview适配器中,基于条件的textview文本大小正在发生变化。

条件1:如果没有贴现值,则必须仅在(textview_price)中显示其价格并隐藏贴现值textview。(textview_price size = 18)

条件2:如果有折扣价的价值,则必须在(textview_price)和折扣价格textview_discounted中显示其价格。(textview_price size = 15,textview_discounted size = 18)。

enter image description here

如上图所示,我设置了textview_discount的可见性。 第一次它显示lsitview完成,因为我设置textview size.But当我滚动lsitview它的显示如上图像没有得到正确的文本大小。文本大小是= 18,其中文本是大的,一些文本视图大小是15.(问题在textView_price setTextSize中无法正常工作)

adapter.java代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_item_booking_slot_hours,parent ,false);
        holder = new ViewHolder();
        holder.tv_hours = (TextView) convertView.findViewById(R.id.tv_hour);
        holder.textView_hour_am = (TextView) convertView.findViewById(R.id.textView_hour_am);
        holder.textView_Price = (TextView) convertView.findViewById(R.id.textView_Price);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
        String stringPrice = "1500";
        String stringDiscountedPrice = "1000"
           if (entity.getPay().equals("0")) {
                holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);
                holder.textView_Price.setText("Rs." + stringPrice);
                holder.textView_Discounted_Price.setVisibility(View.GONE);

        } else if (entity.getPay().equals("1")){
            holder.textView_Discounted_Price.setVisibility(View.VISIBLE);
            holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 15);
            holder.textView_Discounted_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18));

            holder.textView_Discounted_Price.setText("Rs." + stringDiscountedPrice);
            holder.textView_Price.setText("Rs." + stringPrice, TextView.BufferType.SPANNABLE);
        }

    return convertView;
}

行的layout.xml:

<RelativeLayout
        android:id="@+id/relativeLayout_hour"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true">

        <TextView
            android:id="@+id/tv_hour"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerInParent="false"
            android:layout_centerVertical="true"
            android:paddingBottom="5dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:singleLine="true"
            android:text="05:00"
            android:textColor="@drawable/selector_booking_hour_text"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/textView_hour_am"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="false"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/tv_hour"
            android:gravity="center_vertical"
            android:paddingBottom="5dp"
            android:paddingTop="5dp"
            android:singleLine="true"
            android:text=" pm"
            android:textColor="@drawable/selector_booking_hour_am"
            android:textSize="18sp"/>
    </RelativeLayout>

        <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/relativeLayout_hour">

        <TextView
            android:id="@+id/textView_Price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toLeftOf="@+id/textView_Discounted_Price"
            android:singleLine="true"
            android:text="Rs.4000"
            android:textColor="@drawable/selector_booking_hour_text"
            android:textSize="@dimen/text_slot_price" />

        <TextView
            android:id="@+id/textView_Discounted_Price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="2dp"
            android:layout_toLeftOf="@+id/imageView_slot_arrow"
            android:singleLine="true"
            android:text="Rs.3000"
           android:textColor="@drawable/selector_booking_hour_text_discounted"
            android:textSize="@dimen/text_slot_discount_price"
            />

        <ImageView
            android:id="@+id/imageView_slot_arrow"
            android:layout_width="wrap_content"
            android:layout_height="12dp"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="2dp"
            android:src="@drawable/next" />
    </RelativeLayout>

    </RelativeLayout>

任何帮助表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:0)

尝试此修改后的代码

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_item_booking_slot_hours,parent ,false);
        holder = new ViewHolder();
        holder.tv_hours = (TextView) convertView.findViewById(R.id.tv_hour);
        holder.textView_hour_am = (TextView) convertView.findViewById(R.id.textView_hour_am);
        holder.textView_Price = (TextView) convertView.findViewById(R.id.textView_Price);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

           if (entity.getPay().equals("0")) {
            holder.textView_Price.setVisibility(View.GONE);
        } else if (entity.getPay().equals("1")) {
            holder.textView_Price.setVisibility(View.VISIBLE);
        }

           String stringPrice = "1500";
           String stringDiscountedPrice = "1000"
        if(!hasDiscount)//flag means your item has no discount

                holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);
                holder.textView_Price.setText("Rs." + stringPrice);
                holder.textView_Discounted_Price.setVisibility(View.GONE);
        } else {

                holder.textView_Discounted_Price.setVisibility(View.VISIBLE);
                holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 15);
                holder.textView_Discounted_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18));
                holder.textView_Discounted_Price.setText("Rs." + stringDiscountedPrice);
                holder.textView_Price.setText("Rs." + stringPrice, TextView.BufferType.SPANNABLE);
        }

    return convertView;
}

答案 1 :(得分:0)

当我按textView_Price.getTextSize()记录textview_price文字大小时 我得到了行的“textview_price.getTextSize()= 36”和“textview_discount_price.getTextSize()= 36”的随机位置,并且只有textView_Price在该psotion行上显示,我随机获得“textView_Price.getTextSize()= 30”当我滚动lsitview时。

注意:我以textviewSize * 2的形式获取textview大小。 示例:如果textview textSize = 18则为18 * 2 = 36.0。为什么我不知道。

所以,最后在if {...} else {...}条件下我改变代码

if (entity.getPay().equals("0")) {
            holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);
            holder.textView_Price.setText("Rs." + stringPrice);
            holder.textView_Discounted_Price.setVisibility(View.GONE);
                if(holder.textView_Price.getTextSize()==30.0)
                {
                    holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18);

                }
    } else if (entity.getPay().equals("1")){
        holder.textView_Discounted_Price.setVisibility(View.VISIBLE);
        holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 15);
        holder.textView_Discounted_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 18));
        holder.textView_Discounted_Price.setText("Rs." + stringDiscountedPrice);
        holder.textView_Price.setText("Rs." + stringPrice, TextView.BufferType.SPANNABLE);
            if(holder.textView_Price.getTextSize()==36.0)
            {
                holder.textView_Price.setTextSize(TypedValue.COMPLEX_UNIT_PX, 15);

            }
    }