【问题标题】:Android : Strike out Text with bold or thicker line than default STRIKE_THRU_TEXT_FLAGAndroid:用粗体或比默认的STRIKE_THRU_TEXT_FLAG粗线删除文本
【发布时间】:2013-01-02 10:00:12
【问题描述】:

我将以下内容用于罢工文本。

 viewHolder.price_red.setPaintFlags(viewHolder.price_red
                    .getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

它的工作,但我想增加删除线的大小。

谁能帮我增加线条的大小??

【问题讨论】:

  • 尺寸是指厚度吗?
  • @CarlSaldanha 是的线条粗细。

标签: android android-layout


【解决方案1】:

这里是如何去做:使用一个图层列表并放置作为你的文本视图背景。这里我假设你的 textviews 背景是白色的 (#FFFFFF)

在drawables文件夹中创建一个名为 击穿.xml:

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF"/> 
        </shape>
    </item>
    <item>
        <shape android:shape="line">
            <stroke android:width="1dp"
                android:color="#8d8d8d"/> <!-- adjust color you want here -->
        </shape>
    </item>
</layer-list>

然后在你的文本视图中这样做:

    <TextView
                                android:id="@+id/tv_toolbar_prod_price"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"

                                android:paddingRight="3dp"
                                android:text="1,290 B"      

android:background="@drawable/strikethru_line"
                                android:textColor="#070707"
                                android:textSize="13sp" />

3dp 的 padding right 使删除线更加明显。

【讨论】:

    【解决方案2】:

    您无法更改删除线的粗细。

    docs 可以看出,它只是一个标志。打开或关闭。

    虽然有几个选择(黑客多于解决方案):

    1. 使文本变为粗体或描边。这也会自动划出删除线,使其更加明显

    2. 使用drawLine 手动画线。 (不过这确实很难准确做到)

    【讨论】:

    • 感谢@carl 的有用回答。+1 也提供解决方案。
    【解决方案3】:

    这无法直接实现,因为 Android 没有提供任何 API。

    现在,您将不得不采用自定义方式来绘制较粗的线条。1) DrawLine 2) 在 EditText 上使用线条图像

    我尝试在RelativeLayout 下使用EditTextImageView,它对我来说效果很好。

    XML 代码:

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <EditText
                android:id="@+id/etStrike"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPersonName"
                android:text="Strike Thru Text Here"
                android:textColor="@color/blacktext"
                android:textSize="20sp" />
    
            <ImageView
                android:id="@+id/ivStrike"
                android:layout_width="wrap_content"
                android:layout_height="6dp"
                android:layout_centerInParent="true"
                android:background="@color/blacktext" />
        </RelativeLayout>
    

    JAVA代码:

        EditText etStrike = (EditText)findViewById(R.id.etStrike);
        ImageView ivStrike = (ImageView)findViewById(R.id.ivStrike);
    
        float textSize = etStrike.getTextSize()/2;
        int textLength = etStrike.getText().length();
        int totalLengthApprox = (int) (textLength * textSize)-textLength;
        int height = 6; // YOUR_REQUIRED_HEIGHT
    
        RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(totalLengthApprox,height);
        param.addRule(RelativeLayout.CENTER_VERTICAL|RelativeLayout.ALIGN_PARENT_LEFT);
        param.setMargins((int)textSize, 0, 0, 0);
        ivStrike.setLayoutParams(param);
    

    我只测试了几个TextSizeDevice Resolutions,最重要的是,这仅适用于单行EditText,因为多行逻辑变得更加复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-04
      • 2021-05-05
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多