Страница 1 из 2
Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 18:46
kondra007
Здравствуйте. В приложении парсится некоторая страница. Предположим, какой-то пост из блога. Он может идти сплошным текстом, а иногда в нем встречаются картинки.
Вопрос #1: как сделать вывод WebView без горизонтальной прокрутки (чтоб всё отображалось в пределах одного экрана)?
Вопрос #2: WebView я не хочу делать. Так некрасиво. Предположим, я могу в тексте найти изображения, как сделать так, чтобы при загрузке динамически создавались TextView с текстом ДО изображения, ImageView с самим изображением, затем TextView с текстом ПОСЛЕ изображения?
Надеюсь, идея понятна.
Вот, как это должно выглядеть

Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:10
anber
Вопрос #2: WebView я не хочу делать. Так некрасиво. Предположим, я могу в тексте найти изображения, как сделать так, чтобы при загрузке динамически создавались TextView с текстом ДО изображения, ImageView с самим изображением, затем TextView с текстом ПОСЛЕ изображения?
Берешь LinearLayout,
создаешь TextView, делаешь ему что-то типа setText(HTML.fromHTML(text)), добавляешь на LinearLayout,
потом создаешь ImageView, запихиваешь туда картинку, добавляешь, итд.
Глянь тут
тут может понадобится.
по поводу вопрос №1:
http://stackoverflow.com/questions/1106 ... id-webview
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:14
kondra007
anber писал(а):
Глянут
тут может понадобится.
Вчера видел этот пример. Вылетает с ошибкой NullPointerException в этой строке
Код: Выделить всё
urlDrawable.setBounds(0, 0, 0 + result.getIntrinsicWidth(), 0
Поэтому проверить не получается(
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:22
anber
Вчера видел этот пример. Вылетает с ошибкой NullPointerException в этой строке
Есть идеи почему оно падает?
Наводящий вопрос - где находится картинка из примера:

Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:27
kondra007
anber писал(а):
Наводящий вопрос - где находится картинка из примера:
а) В интернете
б) Ну, на Gravatar.com
Если вы про AsyncTask, то он там есть) Но и моя кастомная строка
Код: Выделить всё
String html1 = "Hello" + "<img src=\"https://pp.vk.me/c10716/u121500512/-6/x_7e78b984.jpg\">" + "Test!";
Выдает ту же ошибку. Проблема в result.getIntrinsicWidth() и result.getIntrinsicHeight() (валится даже на выводе переменных в лог).
Если я неправильно Вас понял - поправьте, пожалуйста. Я быдлокодер и многого могу не понимать.
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:35
anber
а) у меня все работает
б) <uses-permission android:name="android.permission.INTERNET" />
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 19:41
kondra007
Ох...да, тупанул

Спасибо!
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 20:00
anber
Если надо изображения побольше -
Если есть проблема с размером изображений -
http://stackoverflow.com/questions/7870 ... 4#10208504
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 20:33
anber
Да, вспомнил, есть еще чудная библотека для обтекания текстом картинок -
https://code.google.com/p/android-flowtextview/

Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 20:36
kondra007
Че-то не работает. Эклипс требует поменять SetHeight на SetMinimumHeight, при этом ничего не меняется =(
А насчет библиотеки - судя по тому, что я прочитал, она просто будет окаймлять уже готовые ImageView, а не вставлять картинки в один TextView...
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 20:43
anber
там в начале поста написано
"You could change your cointainer c (view) to a textView"
А насчет библиотеки - судя по тому, что я прочитал, она просто будет окаймлять уже готовые ImageView, а не вставлять картинки в один TextView...
да, но в 1 посте так и планировалось, с той разнице что ImageView будут между несколькими textView
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 20:51
kondra007
Поменял. В логах ширина и высота выводятся по размеру экрана, а на дисплее - маленький квадрат х_х
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 21:40
anber
Держи пример во вложении. Пробую коннектиться к
http://anber.dp.ua/files/test.html (за доступность сайта не ручаюсь

)
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 21:46
kondra007
Эм...ну, вот как на Galaxy S4 отображается. Правда, тут экран 1080х1920, может, проблема в этом?
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 21:50
anber
Ты хочешь чтобы картинки были выровнены по центру и текст был только между картинками?
Тогда добавь в исходный html тег <br/> до и после картинок.
Или в чем проблема?
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 22:10
kondra007
С < br > проблемы нет, это я исправлю. А как можно сделать, чтоб изображение вытягивалось пропорционально какой-то части экрана?
А то на Galaxy S2 изображение получается в половину ширины дисплея, а на S4 - меньше, чем на четверть. При этом высота вообще какая-то сверхмелкая, узкая полоса выходит.
Re: Динамическое построение Лэйаута
Добавлено: 21 янв 2014, 22:40
anber
Ну если закрыть глаза и писать левой ногой, то это можно сделать так, заменить метод
fetchDrawable() в классе
URLImageParser на такой:
(скалит дроваблу по ширине TextView)
Код: Выделить всё
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
if (drawable == null) {
return null;
}
if (drawable instanceof BitmapDrawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
final int maxSize = container.getWidth();
int outWidth;
int outHeight;
int inWidth = bitmap.getWidth();
int inHeight = bitmap.getHeight();
if(inWidth > inHeight){
outWidth = maxSize;
outHeight = (inHeight * maxSize) / inWidth;
} else {
outHeight = maxSize;
outWidth = (inWidth * maxSize) / inHeight;
}
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, outWidth, outHeight, false);
drawable = new BitmapDrawable(c.getResources(), resizedBitmap);
}
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0 + drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
return null;
}
}
P.S. это первая попавшаяся под руку реализация так что сильно не пинать

Re: Динамическое построение Лэйаута
Добавлено: 22 янв 2014, 02:08
kondra007
Спасибо огромное!
И, пожалуй, последняя проблема, которая меня мучает: если картинка не помещается во весь экран (по ширине умещается, а по высоте уже нет), то она просто обрезается и ScrollView на это не реагирует. Пробовал поставить после всего текста точку, чтоб ScrollView до неё скроллил - не работает.
Re: Динамическое построение Лэйаута
Добавлено: 22 янв 2014, 15:49
anber
пример такой HTML можешь привести?
Re: Динамическое построение Лэйаута
Добавлено: 22 янв 2014, 15:56
kondra007
Код: Выделить всё
<p><img src="https://dl.dropboxusercontent.com/u/46812822/Yandex-Disk-besplatniy-servis-dlya-khraneniya-vashikh-faylov-066.jpg" alt=""/></p> .
(там ещё точка после последнего тега)
Вот 2 скриншота - 1)
http://yadi.sk/d/Cv1WKA2pGXbxe 2)
http://yadi.sk/d/NkpLjid4GXc2b
Видно, что нижняя часть (зеленая трава) в альбомной ориентации уже не вмещается, однако скролл не действует.