Выберите вид обтекания, когда макет шире экрана - PullRequest
2 голосов
/ 07 марта 2012

У меня горизонтальный линейный макет с изображением и парой текстовых представлений. На некоторых языках (немецкий ...) текст настолько длинный, что для размещения всего на одной строке макет должен быть шире экрана. Чтобы предотвратить это, android автоматически переводит текстовые представления на следующую строку.

Есть ли способ выбрать, какой из текстовых представлений закончится переносом? На данный момент кажется, что последний вид, добавленный к макету, является тем, который переносит. Однако мне бы очень хотелось, чтобы один из более ранних текстовых видов был перенесен и последний текстовый вид всегда отображался в одной строке. Это возможно? Я уже разделил на подклассы большинство представлений, чтобы можно было переопределить защищенные методы.

Вот примерный план моего кода:

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/some_icon" />
  <TextView
    android:id="@+id/can_wrap_if_neccessary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/some_really_long_text" />
  <TextView
    android:id="@+id/shouldnt_wrap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/some_more_really_long_text" />
</LinearLayout

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Я понял это: решение состоит в том, чтобы установить атрибут layout_weight в представлениях, которые я хочу обернуть, и вообще не устанавливать его в представлениях, которые я не хочу оборачивать. Любое представление с layout_weight предпочтительнее, чем без.

2 голосов
/ 07 марта 2012

Мы можем знать, какой текст обернуть.

Логика: Сначала вычислите ширину текста. Если ширина текста больше ширины экрана, этот текст будет перенесен

Следующий метод возвращает true, если текст будет перенесен, иначе возвращает false

Исходный код

boolean isTextWrapped(String text) {
        boolean isWrapped = false;
        int widthOfText = 0;
        int deviceWidth = 0;
        // calculate widthOftext
        TextView textView = new TextView(this);
        textView.setVisibility(View.GONE);
        Rect bounds = new Rect();
        Paint textPaint = textView.getPaint();
        textPaint.getTextBounds(text, 0, text.length(), bounds);
        widthOfText = bounds.width();
        System.out.println("...text view width..."+widthOfText);
        // calculate width of screen
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        deviceWidth = displaymetrics.widthPixels;
        System.out.println("...text view width..."+widthOfText+"...screen width..."+deviceWidth);
        isWrapped = widthOfText > deviceWidth ? true : false;
        return isWrapped;

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