Android многоколоночный текст - PullRequest
4 голосов
/ 07 декабря 2011

Можно ли как-нибудь отобразить длинный текст в нескольких столбцах?

Например, мне нужно отобразить статью, у меня есть все String, и я хочу разместить ее в 3 столбцах. Как мне этого добиться? Существуют ли какие-либо библиотеки, которые могут мне помочь или вы знаете, как мне решить эту проблему?

Любое предложение приветствуется. Спасибо.

РЕДАКТИРОВАТЬ: Проблема заключается в разделении строки, а не макет. Я знаю, что могу использовать TableLayout ... или веса ... для равномерного распределения столбцов и так далее. Проблема в том, как правильно разделить String. Может быть, 2 столбца будут заполнены, а 3-й только половина? Я не знаю, как к этому подойти, а не к фактическому макету.

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

Проверьте TableLayout .Чтобы разделить ваш текст, вы можете разделить ваш текст после 1/3 вашего количества символов.Конечно, вы должны разделить текст на один символ пробела. ОБНОВЛЕНИЕ: См. Также мой пример кода в конце моего сообщения.

Example

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1">
    <TableRow>
        <TextView
            android:text="@string/table_layout_4_open"
            android:padding="3dip" />
        <TextView
            android:text="@string/table_layout_4_open_shortcut"
            android:gravity="right"
            android:padding="3dip" />
    </TableRow>

    <TableRow>
        <TextView
            android:text="@string/table_layout_4_save"
            android:padding="3dip" />
        <TextView
            android:text="@string/table_layout_4_save_shortcut"
            android:gravity="right"
            android:padding="3dip" />
    </TableRow>
</TableLayout>

Для разбиения вы можете проверить этот код.Алгоритм может быть немного лучше быть ближе к разделенным границам, но это работает.

public static String[] getRows(String text, int rows) {
    // some checks
    if(text==null)
        throw new NullPointerException("text was null!");
    if(rows<0 && rows > 10)
        throw new IllegalArgumentException("rows must be between 1 and 10!");
    if(rows==1)
        return new String[] { text };
    // some init stuff
    int len=text.length();
    int splitOffset=0;
    String[] ret=new String[rows];
    Pattern whitespace = Pattern.compile("\\w+");
    // do the work
    for(int row=1;row<rows;row++) {
        int end;
        int searchOffset=len/rows*row;          
        // search next white space
        Matcher matcher = whitespace.matcher(text.substring(searchOffset));
        if(matcher.find() && !matcher.hitEnd()) {
            // splitting on white space
            end=matcher.end()+searchOffset;
        } else {
            // hard splitting if there are no white spaces
            end=searchOffset;
        }
        ret[row-1]=text.substring(splitOffset, end);
        splitOffset=end;
    }
    // put the remaing into the last element
    ret[rows-1]=text.substring(splitOffset);
    return ret;
}
4 голосов
/ 11 декабря 2011

Вы ищете стиль «газетной колонки»?После заполнения первого (фиксированного размера) текстового поля текст должен перейти в другой и т. Д.

Если это так, почему бы не отобразить длинную строку в WebView , где вы можетелегче достичь этого с помощью HTML и CSS?

3 голосов
/ 16 декабря 2011

использовать ( Рассчитать размер текста в соответствии с шириной текстовой области )

Paint paint = new Paint();
Rect bounds = new Rect();

int text_height = 0;
int text_width = 0;

paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size

String text = "Some random text";

paint.getTextBounds(text, 0, text.length(), bounds);

text_height =  bounds.height();
text_width =  bounds.width();

, чтобы вычислить, сколько вашего текста займет место. и вычислите view.getWidth () о том, сколько равна ширине вашего вида ... Затем выполните все необходимое, разделив текст соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...