Раздувание всплывающего окна / ширины списка и текста

У меня есть всплывающее окно, которое раздувает представление списка в относительной разметке и представление списка, которое раздувает представление текста в относительной разметке. Ширина всплывающего окна по умолчанию совпадает с родительским событием, хотя я определил повсеместно перенос содержимого, как в файлах макетов, так и только программно.

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

Ширина самого длинного текста, скажем, "Raspberry (8:11 PM)" жирным шрифтом, равна 203. Я пытаюсь назначить его с помощью popupWindow.setWidth(maximum_width) после того, как всплывающее окно создано, программно.

(Некоторые строки, которые не являются достаточно конкретными для этого заданного вопроса, были удалены).

// int maximum_height = 0;
int maximum_width = 0;

public View getView(int position, View view, ViewGroup viewgroup) {
    ...
//  if(height > maximum_height)
//      {
//          maximum_height = height;
//      }

    if(width > maximum_width)
        {
            maximum_width = width;
        }
    ...
}

Следующие функции textView1.getHeight() а также textView1.getWidth() всегда возвращать 0. Почему?

Итак, основываясь на некоторых предложениях в переполнении стека, я попытался использовать следующие альтернативные способы и методы:

textView1.measure(0, 0);
int width = textView1.getMeasuredWidth();

Это возвращает 0 в первый раз, 180 во второй раз и 195 с тех пор.

В первый раз, когда для представления текста в виде списка возвращается ширина 0, я также получаю следующее предупреждающее сообщение. Зачем?

W / InputEventReceiver: Попытка завершить входное событие, но приемник входного события уже был удален.

Используя этот фрагмент кода:

Rect bounds = new Rect();
Paint textPaint = textView1.getPaint();

textPaint.getTextBounds(name, 0, name.length(), bounds);
int width = bounds.width();

он возвращает 0 в первый раз и 195 с тех пор.

Кроме того, почему:

switch(read)
    {
        case 0:
            textPaint.setTypeface(Typeface.BOLD);
            break;
        case 1:
            textPaint.setTypeface(Typeface.NORMAL);
            break;
    }

выдать сообщение об ошибке о том, что setTypeface(android.graphics.Typeface) не может быть применен к (int)? Есть ли способ, которым кто-нибудь здесь знает, что это может быть решено в?

Используя этот фрагмент кода:

Rect bounds = new Rect();
Paint textPaint = textView1.getPaint();

textPaint.measureText(name, 0, name.length());
int width = bounds.width();

он всегда возвращает 0.

Используя этот фрагмент кода:

TextPaint paint = new TextPaint();
int width = (int) Math.ceil(paint.measureText(name));

он возвращает 0 в первый раз и 111 с тех пор.

Используя этот фрагмент кода:

int width = (int) Math.ceil(textView1.getTextSize());

он всегда возвращает 21, что является неправильным способом использования, потому что функция textView1.getTextSize() специально зарезервирована для получения количества символов только внутри textView1.

  • Есть ли альтернативный способ или метод, чтобы получить правильный размер ширины текстового представления внутри в виде списка, либо жирным шрифтом с белым фоном (непрочитанные сообщения) и обычной гарнитурой на сером фоне (чтение сообщений), а затем выровнять весь текст слева? Пожалуйста, помогите мне.

  • Получение значения ширины 195 для представления текста внутри в представлении списка немного меньше правильного значения размера 203. Принимает ли во внимание тот факт, что окрашенный и измеренный текст написан обычным шрифтом, без учета и учета учитывать текст жирным шрифтом? Кто-нибудь здесь знает, каким образом он может быть возвращен правильно с помощью in?

  • Следующие функции textView1.getHeight() а также textView1.getWidth() всегда возвращать 0. Есть ли какая-то функция, похожая на public void onWindowFocusChanged(boolean hasFocus) для любого действия Android, которое можно использовать для всплывающего окна, так что его ширина может быть отрегулирована и установлена ​​программно, после того как она нарисована, чтобы быть максимальной шириной всех текстовых представлений внутри в представлении списка. Используя следующий фрагмент кода,

    view2.post(new Runnable() {
        public void run() {
            windows.showAtLocation(layout,Gravity.CENTER, 0, 0);
        }
    });
    

    Похоже, что это не помогло, даже в решении этой самой проблемы, намного дальше.

Заранее спасибо.

Смотрите также связанный вопрос здесь тоже.

0 ответов

Другие вопросы по тегам