#android #gridview
#Android #gridview
Вопрос:
Я работаю над фрагментом кода, который генерирует представление книжной полки с использованием компонентов TableLayout, HorizontalScrollView и RelativeLayout. У меня есть титульная страница по умолчанию, я должен поместить название книги на обложку и сформировать вид сетки (книжная полка).
Примерно код выглядит так
bitmapObj = BitmapFactory.decodeResource(getResources(), R.drawable.bookshelf_background_image);
tableLayoutObj = (TableLayout) findViewById(R.id.tblLayout);
tableRowObj = new TableRow(this);
for(int i = 0; i < numberOfRows; i )
{
horizontalScrollObj = new HorizontalScrollView(this
for(int j = 0; j < numberOfColumns; j )
{
relativeLayoutObj =(RelativeLayout) inflaterObj.inflate(R.layout.bookshelf_relative_layout, null);
tableRowObj.addView(relativeLayoutObj);
}
}
Что я хотел здесь знать, так это то, что я хотел получить ширину relativelayout, которую я добавляю в TableRob obj, чтобы я мог определить параметр, сколько книг я могу разместить в ряд.
Может ли кто-нибудь помочь мне, пожалуйста, в этом?
Ответ №1:
Существует множество методов, таких как:
- view.getLeft();// возвращает левую позицию представления относительно его родительского элемента
- view.GetRight();// возвращает правильное положение представления относительно его родительского элемента аналогично сверху и снизу
- view.getWidth()
- view.getHeight()
Ответ №2:
Вероятно, на момент выполнения вашего кода ваш вид еще не был отрисован, поэтому его ширина и высота равны нулю.
Вы можете использовать view.post(Runnable)
и для Runnable
получения их ширины и высоты..
Комментарии:
1. он возвращает значение -1 в общедоступном методе void run()
2. вы уверены, что он был добавлен в иерархию представлений?
3. да, после вызова только метода ‘add’ я вызываю, чтобы получить ширину представления
Ответ №3:
Я знаю, что это поздно, но мне самому нужно было что-то вроде вашего вопроса, и я придумал это решение. (он НЕ возвращает 0, я проверил)
ViewTreeObserver viewTreeObserver = YOURVIEW.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
YOURVIEW.getViewTreeObserver().removeOnGlobalLayoutListener(this);
viewWidth = YOURVIEW.getWidth();
viewHeight = YOURVIEW.getHeight();
}
});
}
Комментарии:
1. да, я пробовал, я работаю на устройстве nexus, ширина устройства равна 1080, но относительная ширина макета, которую я получаю, равна 0 (нулю)
2. вы установили вес в 0 в xml?
3. Нет. Это мой XML-файл для относительной компоновки <?xml version=»1.0″ encoding=»utf-8″?> <RelativeLayout xmlns:android=» schemas.android.com/apk/res/android » android:id=»@ id/root_relative_layout_id» android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:background=»#0000FF»>
4. и у него есть 2 дочерних элемента. один из них — вид изображения, а другой — текстовый вид/>
5. текстовое представление5dp» android: paddingRight=»5dp» android: paddingTop=»5dp» android: singleLine =»false» android: textColor =»#000000″ android:TextStyle =»bold» />