Android and   TextView


74

TextViewに を追加することは可能ですか?誰も似た機能を達成しましたか?

TextViewに壊れないスペースが必要です。

137

私はそれが実際に作業を行うことを保証するために、これを試していないが、理想的な世界でTextViewはHTMLよりも簡単/軽量化ソリューションであると思われる、Unicode no-break space character\u00A0)を尊重しなければなりません。

+3

を。これをxmlまたはjavaコードに追加できます。 Javaコードで、xmlでうまく動作します。私は多くのことをテストしていませんが、それは仕事をするはずです。 04 7月. 112011-07-04 07:52:17

  0

\ u0020も\ u00A0も動作しません。 XMLでプレビューしたり、setText()でJavaで設定したりすることもできません。 Android 4.1と4.2の両方で試しました 20 2月. 132013-02-20 06:08:43

  0

\ u00A0は、Nexus 4でAndroid 4.4でstrings.xmlを使用してくれました。 04 12月. 132013-12-04 08:24:39

  0

\ u00A0はAPI-8からAPI-19までうまく動作します。使用例:<文字列名= "今日">今日\ u00A0</string> 09 12月. 132013-12-09 15:59:49

+1

これはコンマと組み合わせて使用​​できません。そのような場合にはカンマの直後に改行が入ります 01 7月. 152015-07-01 13:26:58

+1

\ u00A0は私のためのトリックをしません。それはスペースを作っていない、単語に加わるだけです - Android 4.4.4,5.0,5.1 06 10月. 152015-10-06 15:14:21

  0

'&#160;'はアンドロイド用の空白です。遅すぎるかもしれません 16 9月. 162016-09-16 08:56:47

  0

Kotlinでは、それは非常にうまくいきます。私はこれですべての空白を置き換え、最後の文字から省略します。 "Hello ..."の代わりにstr.replace( ""、 "\ u00A0")が返されます。 23 2月. 182018-02-23 02:27:09


0

これはのTextView

<string name="text">Example:\u00A0</string>

+4

これは\ u00A0でなければなりません 26 3月. 142014-03-26 19:07:53


16

\u00A0にNBSPを使用する\u0020はのTextViewが非断線を尊重すべき


14

非破断空間ではない、非破断空間であることの例でありますスペース

<string name="test">Hello&#160;world</string> 

または


1

私が遭遇した1つのユニークな状況は、String.formatのパラメータを取る文字列リソースに改行しないスペースを追加することでした。

<resources> 
    <string name="answer_progress" formatted="false">Answered %d of %d</string> 
</resources> 

私は単純にコピーして、改行なしスペース文字までの文字列にし、それがコンパイルした後、通常の古いスペースに置き換えたことを試みました。

形式の引数に番号を付けるとバックスラッシュ表記を使用して、 =「false」にフォーマットされたを削除するには、私の仕事:

<resources> 
    <string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string> 
</resources> 

10

読みやすいソリューションを持っている&nbsp;を使用することが可能です。\u00A0または&#160;または&#xa0;/&#x00a0;をテキストに含めることは、16進コードを覚えていない限り、ソースコード(または翻訳者)の読者に実際に多くの情報を伝えません。ここでstrings.xmlで指定されたエンティティを使用する方法です:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE resources [ 
    <!ENTITY nbsp "&#160;"><!-- non-breaking space, U+00A0 --> 
]> 
<resources> 
    ... 
</resources> 

これが欠けて宣言を作成します。元ののHTMLの宣言は、から参照されるhttps://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.entに記載されています。 XMLパーサはファイルのロード中にこれらのファイルと代替ファイルを読み込むので、エンティティは結果としてコンパイルされたリソースには存在しません。Androidのテキスト(CharSequence)資源のAndroidの文字列(フォーマット済み)資源 で

<!-- Defined in <resources> --> 
<string name="html_text">Don\'t break <b>this&nbsp;name</b></string> 

<!-- Used in a layout --> 
<TextView 
    android:layout_width="130dp" 
    android:layout_height="wrap_content" 
    android:background="#10000000" 
    android:text="@string/html_text" 
    /> 

デバイスとプレビュー(プレビューがHTMLを認識しない)
HTML on device HTML in preview

&nbsp;

&nbsp;
<!-- Defined in <resources> --> 
<string name="formatted_text">%1$s is&nbsp;nice</string> 

<!-- Used in a layout --> 
<TextView 
    android:layout_width="130dp" 
    android:layout_height="wrap_content" 
    android:background="#10000000" 
    tools:text="@string/formatted_text" 
    /> 
コード内でその後3210

String contents = getString(R.string.formatted_text, "Using an &nbsp;"); 
((TextView)view.findViewById(android.R.id.text1)).setText(contents); 

デバイスとプレビュー(!プレビューが実体を認識しないと、Java文字列がリテラルテキストです)
formatted on device formatted in preview

さらにトリック

これらは一例ですDTDエンティティの使用は、あなた自身の好みでベースを使用してください。

<!ENTITY con "\&apos;"><!-- contraction, otherwise error: "Apostrophe not preceded by \" 
          Sadly &apos; cannot be overridden due to XML spec: 
          https://www.w3.org/TR/xml/#sec-predefined-ent --> 
<!ENTITY param1 "&#37;1$s"><!-- format string argument #1 --> 

<string name="original">Don\'t wrap %1$s</string> 
<string name="with_entities">Don&con;t wrap &param1;</string> 

それらの両方がハイライト表示に役立ちます。 highlighted XML entities

  0

Androidは '' '文字をうまく処理します。アポストロフィーエンティティ。 '<string name =" original ">%1 $ sをラップしないでください。</string>'は期待通りに動作します。 21 7月. 162016-07-21 15:02:59

+1

@Ditiこれは[APOSTROPHE](http://www.fileformat.info/info/unicode/char/0027/index.htm)ではない、[RIGHT SINGLE QUOTATION MARK](http://www.fileformat。 info/info/unicode/char/2019/index.htm); '' '' '' ''を比較してください。 AndroidはよりユニークなUnicode文字では問題ありませんが、エスケープする必要があるASCII 0x27に問題があります。エンティティは単なる利便性に過ぎず、どこに役立つかを示すためにそこに置いています。 21 7月. 162016-07-21 16:35:21

  0

これは素晴らしい=)ありがとうございます。私はこれをはるかにクリーンで読みやすいように見つける。 22 12月. 162016-12-22 14:01:17

  0

偉大な答えは、ありがとう!文字列に '&nbsp;'をつけることは、ユニコード '\ u00A0'よりも翻訳者にとって意味があることに同意します 06 4月. 172017-04-06 21:59:14


0

これは私の仕事:素晴らしい作品

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
    textview.setText(Html.fromHtml(your string, Html.FROM_HTML_MODE_LEGACY)); 
} else { 
    textview.setText(Html.fromHtml(your string); 
}