6

画面にテキストをポップするアプリケーションを作成していますが、通常は 1 行よりも長くなります。行の最後の単語が長すぎて収まらない場合、textview はそれを次の行の先頭に配置します。この動作を変更する方法はありますか? 最後の単語が長い場合、結果は恐ろしいものになります。

基本的に私はこのようなことを達成したいと思います

|Lorem ipsum dolor sit amet, consecte|
|tur adipicing エリート。Lorem イプサム ドル |
|または座って、consectetur adipicing |
|エリート。| |

私が今得ているものの代わりに。

|Lorem ipsum dolor sit amet, |
|consectetur adipiscing elit. ロレム |
|ipsum dolor sit amet, consectetur |
| | エリート。| |

ありがとうございました!

追加情報

長さが異なるランダムな引用符を表示するこのテキストビューがあります。私が必要としているのは、すべての行の最後の単語を分割する方法です。

私はこのようなことをする方法を探しています!

ここにレイアウトxmlがあります

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/title" />

<TextView
    android:id="@+id/quote"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/quote" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="refresh"
    android:text="@string/tellmemore" />

4

5 に答える 5

2

HTML を使用すると正当化にアクセスできるため、WebView に切り替えることにしました。あなたはそれについてここここで読むことができます.cssを挿入したい場合は、これが良いチュートリアルです.
ハイプネーションを探している場合は、Google の hypenator.jsを調べることができます。

だから、ここで自分自身に答えるのが解決策です!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFD0" >

<WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:onClick="refresh"
    android:text="@string/tellmemore" />

そして活動では

    ...
    WebView mWebView;
    @Override
    protected void onCreate(Bundle savedIstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedIstanceState);
        setContentView(R.layout.webview);
        mWebView = (WebView) findViewById(R.id.webview);
        load();}

        public void load() {
        // some other code to parse the string from a database
        String text = "<html> <head>" + tokens[1].toString()"</head><body>" + "<p align=\"justify\">"+ tokens[0].toString() + "</p> " + "</body></html>";       
        mWebView.loadData(text, "text/html", "utf-8");}
于 2013-10-06T13:53:05.097 に答える
2

これを試して

 private String getWidthFitString(String input) {
    Paint paint = text.getPaint();
    // you can define max width by yourself
    int maxWidth = getContentMaxWidth();
    float width = paint.measureText(input);
    if (width > maxWidth) {
        List<String> words = Arrays.asList(input.split("\\s"));
        int breakLinePosition = 0;
        String toBreakLineText;
        List<String> toBreakLineWords = new ArrayList<>();
        while (breakLinePosition < words.size()) {
            toBreakLineWords.add(words.get(breakLinePosition));
            toBreakLineText = TextUtils.join(" ", toBreakLineWords);
            float currentWidth = paint.measureText(toBreakLineText);
            if (currentWidth > maxWidth) {
                break;
            }
            breakLinePosition ++;
        }
        if (breakLinePosition > 1) {
            toBreakLineWords.remove(toBreakLineWords.size() - 1);
            toBreakLineText = TextUtils.join(" ", toBreakLineWords);
            List<String> fromBreakLineWords = new ArrayList<>();
            for (int i = breakLinePosition; i < words.size(); i++) {
                fromBreakLineWords.add(words.get(i));
            }
            return toBreakLineText + "\n" + getWidthFitString(TextUtils.join(" ", fromBreakLineWords));
        } else {
            return input;
        }
    }
    return input;
}
于 2018-01-05T05:44:29.443 に答える
1

プログラムでそれを行うことができます。ただ行う:

myString.replace(" ", "\u00A0");
myTextView.setText(myString);
于 2016-01-15T10:45:33.520 に答える
0
// trh this
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lorem ipsum dolor sit amet,consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit."
        android:gravity="clip_horizontal"/>
于 2013-10-05T12:53:50.560 に答える
-2

android:maxLine = 行数を使用

于 2013-10-05T12:59:58.617 に答える