【问题标题】:TextView size is showing different when custom listview is scrolled滚动自定义列表视图时,TextView 大小显示不同
【发布时间】:2016-01-22 21:41:10
【问题描述】:

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

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

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

如上图所示,我正在设置 textview_discount 的可见性消失。 第一次它显示 lsitview 完整,因为我设置了 textview 大小。但是当我滚动 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>

感谢任何帮助。谢谢。

【问题讨论】:

  • 我已经编辑了我的问题并添加了后适配器代码。你现在可以帮忙吗? @kishorejethava
  • 你已经在inflater上设置了条件对吗?
  • 意思是我没有得到你。我已经设置了我在适配器和布局文件中设置 textview 值的条件(试图从 layout.xml 文件中删除值但没有工作)。@kishorejethava
  • 它在第一次加载时完全设置了 textview 文本大小,但是当我开始滚动列表视图时,它显示为显示的图像。谢谢。 @kishorejethava
  • 已发布 xml 代码 @kishorejethava

标签: android listview scroll text-size


【解决方案1】:

试试这个修改后的代码

@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;
}

【讨论】:

  • 感谢您的帮助,但我试过了,如果条件我忘记在代码中提及抱歉,我已经编码了,所以我再次编辑了我的代码。 @kishore jethava
  • 发布您的xml 或查看您的列表数据值
  • 它正在工作,伙计!错误在其他地方。查看您的列表数据。
  • 1.) 当整个列表中存在两个值时,折扣值和价格都在同一个列表中工作得很好。 2.)当同一个列表中的单个 textview 价格也很好,但是 3.)当列出两种类型的值时,其中一些行同时具有折扣和价格,而某些行只有价格,那么它不能在同一个列表中工作。 @kishorejethava
  • 是的,但仅当我第一次滚动 lsitview textview 文本大小时,有些设置为 18 而不是 15,有些设置为 15 而不是 18。
【解决方案2】:

当我以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);

            }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多