앱 위젯에서 텍스트를 쉽게 통과 할 수있는 방법이 있습니까?


138

Android의 앱 위젯 내에서 텍스트를 공격하는 쉬운 방법이 있는지 궁금합니다. 일반적인 활동에서는 textview 플래그를 사용하는 것이 매우 쉽습니다.

textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

그러나 앱 위젯에서 원격보기 만 사용할 수 있습니다 ... 이것이 가능한지 모르겠습니다.

누구든지 이것에 대해 알고 있습니까?

감사!


여기 내 대답을 참조하십시오! stackoverflow.com/a/35351523/250260
Jorgesys

xml-only나 같은 솔루션 을 원한다면 : stackoverflow.com/a/49062515/3579786
Jiyeh

1
그것은 도움이 될 수 있습니다 ... 6 가지 방법-Android TextView StrikeThrough
c49

답변:


68

이것을 사용할 수 있습니다 :

remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

물론 android.graphics.Paint 클래스에서 다른 플래그를 추가 할 수도 있습니다.


8
이것이 더 많은 표를 얻지 못한 방법을 모르면 질문에 완벽하게 대답합니다. 감사.
James Cross

먼저 remoteviews가 무엇인지 확실하지 않으며 모든 안드로이드 버전에서 작동하지 않습니다.
akshat tailang

이것은 우리가 찾고있는 대답입니다. androidTextViews에서 app-widgets로 작업하면 removeViews를 통해서만 액세스 할 수 있습니다. 현재 TextView에 직접 액세스 할 수 없습니다.
endevour

188

다른보기에서 테스트하지 않은 텍스트보기에서 프로그래밍 방식으로 수행하려면 >>

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

13
앱 위젯에는 사용할 수 없습니다. RemoteView에서만 작동하며 페인트 플래그를 읽는 방법은 없습니다.
Ridcully

78

프로그래밍 방식으로 페인트 방식보다 해킹처럼 보이지 않는 또 다른 방법 :

대신에 :

tv.setText(s);

하다:

private static final StrikethroughSpan STRIKE_THROUGH_SPAN = new StrikethroughSpan();
...
tv.setText(s, TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) tv.getText();
spannable.setSpan(STRIKE_THROUGH_SPAN, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

감사합니다는 매력처럼 작동합니다. 특히 TextView의 일부에 취소 선이 필요할 때
Diljeet

Spannable의 +1 솔루션이 효과가있었습니다. 대단히 감사합니다. 당신은 내 하루를 구했습니다. Thanks man;)
Simon Dorociak

이 적용되지 않는 한이 질문에 대답하지 않습니다RemoteView
Alex.F

@ Alex.FI는 예를 들어 알림 (원격보기)에서 작동하기 때문에 약간 놀랍습니다. 그래도 AppWidgets로 테스트하지 않았다는 것을 인정해야합니다.
BoD

1
앱 위젯 (ParcelableSpan을 구현하는 모든 프레임 워크 범위)에서 작동합니다.
Karsten

58

2015 업데이트 : 여러분, 이것은 매우 오래된 안드로이드 버전입니다. 최신 솔루션에 대한 다른 답변을 참조하십시오!


전체 텍스트보기를 취소하려면 특정 배경 이미지를 사용하여 취소 선 효과를 시뮬레이션 할 수 있습니다.

android:background="@drawable/bg_strikethrough"

를 Where bg_strikethrough당김이 아무리 패딩 양쪽 성장, 중간을 통해 실선을 유지하는 9 패치, 당신이 합리적이라고 생각합니다. 나는 이것을 다음과 같이 사용했다 :

대체 텍스트

(명확성을 위해 확대 .. 1300 %!)

대체 텍스트

그것은 내 HDPI 버전이므로 (첫 번째 버전 http://i.stack.imgur.com/nt6BK.png ) 그대로 저장 res/drawable-hdpi/bg_strikethrough.9.png하면 구성이 다음과 같이 작동합니다.

대체 텍스트


TextView가 텍스트보다 길고 텍스트 만 입력해야하는 경우 어떻게해야합니까?
maysi

검은 색과 한 줄짜리 텍스트에만 ... @ruhalde가 나를 위해 일했습니다.
ahmed_khan_89

27

이를 위해 이것을 사용할 수 있습니다

 title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

그리고 제거를 위해 이것을 사용할 수 있습니다

 title.setPaintFlags(title.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

1
스트라이크 색상을 추가하는 방법
Harsha

@Harsha 이것은 텍스트의 색상 만 사용할 수있는 것으로 보입니다. 다른 취소 선 색상을 원하면 다른 구현 방법을 시도해야합니다.
Michael

19

단어가 하나라도 있으면 드로어 블을 사용할 수 있습니다. 다음은 예입니다.

<item android:state_pressed="false"><shape android:shape="line">
        <stroke android:width="2dp" android:color="#ffffff" />
    </shape>
</item>

여러 줄이있는 경우 다음 코드를 사용할 수 있습니다.

TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)

@Skizo 나는 그것이 당신을 도와 기쁘다
Akshay Mukadam

13

Kotlin 사람들을위한 확장 프로그램입니다.

fun TextView.showStrikeThrough(show: Boolean) {
    paintFlags =
            if (show) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
            else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}

용법

textView.showStrikeThrough(true)

한정

취소 선은 텍스트와 동일한 색상 일 수 있습니다

(즉, 빨간색 텍스트와 파란색 취소 선은 불가능합니다)


9

여러 줄로 된 TextView의 경우 다음과 같이 android.text.style.CharacterStyle을 사용해야합니다.

SpannableString spannable = new SpannableString(text);
spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
remoteViews.setTextViewText(R.id.itemText, spannable);

8

문자열을 사용하면 정말 쉽습니다.

<string name="line"> Not crossed <strike> crossed </strike> </string>

그리고 그냥 :

<TextView 
        ...
         android:text="@string/line"
 />

4
@war_Hero 나를 위해 일했지만 Android Studio의 렌더러에서 렌더링되지 않습니다. 실제로 그것을보기 위해 그것을 만들어야했습니다.
Mic Fok

8

아래 줄을 추가하십시오 :-

TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

"tv"대신 참조를 사용하십시오


1
이것은 질문을 참조하지 않고 AppWidget의 RemoteViews 객체에 대해 묻습니다.
Matthew

3

이 코드를 사용해보십시오

textview.setText((Html.fromHtml("<strike>hello world!</strike>")));

2

롤리팝 이상. 드로어 블 생성

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="line">
            <stroke android:width="1dp"
                android:color="@color/onePlusRed" />
        </shape>
    </item>
</selector>

포 그라운드로 사용하십시오.
android:foreground="@drawable/strike_through"


0

당신은 추가 :

TextView variableTv = (TextView) findViewById(R.id.yourText);

당신은 변수를 설정 / 추가합니다 :

variableTv.setText("It's Text use Style Strike");

그런 다음 variableTv에 .setPaintFlags를 추가하십시오.

variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

0

나는 몇 가지 옵션을 시도했지만 이것이 나에게 가장 효과적입니다.

String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));

건배


0

안드로이드 리소스는 꽤 좋은 HTML 마크 업을 지원
합니다 아래 HTML 요소가 지원됩니다 :

Bold: <b>, <em>
Italic: <i>, <cite>, <dfn>
25% larger text: <big>
20% smaller text: <small>
Setting font properties: <font face=”font_family color=”hex_color”>. Examples of possible font families include monospace, serif, and sans_serif.
Setting a monospace font family: <tt>
Strikethrough: <s>, <strike>, <del>
Underline: <u>
Superscript: <sup>
Subscript: <sub>
Bullet points: <ul>, <li>
Line breaks: <br>
Division: <div>
CSS style: <span style=”color|background_color|text-decoration”>
Paragraphs: <p dir=”rtl | ltr style=”…”>

그러나 안드로이드 스튜디오 레이아웃 미리보기에서는 렌더링되지 않습니다. Android Studio 3.3.1에서 마지막으로 테스트

예를 들어 취소 선은 다음과 같습니다.

<string name="cost"><strike>$10</strike> $5 a month</string>

-1

나는 이것을 일반 (local) TextView에서 수행했으며, 문서는 두 방법 사이에서 메소드를 나열하기 때문에 원격 다양성에서 작동해야합니다.

remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));


그것은하지 작업을 :( 않습니다 나는이 일을하고있다 :. remoteView.setTextViewText (R.id.text, Html.fromHtml ( "<델>"+ 값 + "</ 델>"));
안토니오

에서 <del>지원하지 않는 것일 수 있습니다 Html.fromHtml(). 당신은 시도 <strike>또는 <s>?
Blrfl

고마워요 Blrfl, 그러나 그것은 작동하지 않습니다. Html.fromHtml ()에 의해 HTML 태그가 지원되는 것 같습니다.
Antonio

버머. 도와 줄 수 없어서 미안 해요
Blrfl


-1

나는 오래된 질문에 대답하고 있는데, 다른 사람이 TextView의 특정 부분을 프로그래밍 방식으로 삼는 데 도움이 될 수 있습니다.

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Text need to be set here", TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) textView.getText();
spannable.setSpan(new StrikethroughSpan(), 5, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

따라서이 예제 코드에서 5는 시작 위치이고 8은 텍스트의 종료 위치를 잡아 당겨야합니다. 따라서이 코드를 실행 한 후 텍스트가 "필요"상태가되도록 할 수 있습니다. 다른 사람에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.