Раздувание всплывающего окна / ширины списка и текста
У меня есть всплывающее окно, которое раздувает представление списка в относительной разметке и представление списка, которое раздувает представление текста в относительной разметке. Ширина всплывающего окна по умолчанию совпадает с родительским событием, хотя я определил повсеместно перенос содержимого, как в файлах макетов, так и только программно.
Я хочу иметь ширину всплывающего окна, чтобы обернуть содержимое текстовых представлений внутри представления списка, взяв ширину самого большого текстового представления, а затем выровнять весь текст по левому краю, либо жирным шрифтом с белым фоном (непрочитано сообщения) и обычная гарнитура на сером фоне (читать сообщения).
Ширина самого длинного текста, скажем, "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); } });
Похоже, что это не помогло, даже в решении этой самой проблемы, намного дальше.
Заранее спасибо.