Добавление представления в область заполнения GridLayout

Возможно ли (или приемлемо) добавить изображение поверх верхней области заполнения GridLayout?

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

До сих пор я использовал метод setPadding(), чтобы все кнопки отображались дальше по экрану, оставляя достаточно места для экрана. Я предполагаю, что я должен сделать новую строку для экрана в GridLayout, но мне было интересно: возможно ли добавить ImageView поверх GridLayout в этой области заполнения, или это большое «нет нет» и Должен ли я вместо этого создавать новую строку?

.. buttons already added to gridLayout
gridLayout.setBackground( drawableMetalBackground );

ImageView iv = new ImageView( this );  // 'this' context should be gridLayout context??

iv.setBackground( npdScreen );

iv.layout( 0, 0, 300, 100 );  // Hardcode positions for example
gridLayout.addView( iv );

person SparkyNZ    schedule 15.04.2014    source источник
comment
1. Оберните их обоих в родительский макет. 2. Используйте xml. 3. Прекратите хардкодить!   -  person ElDuderino    schedule 15.04.2014
comment
@ElDuderino: я бы с удовольствием использовал XML все время, если бы он позволял строкам и столбцам GridLayout красиво занимать весь экран и только жестко кодировался при попытке заставить работать тестовые приложения.   -  person SparkyNZ    schedule 16.04.2014


Ответы (2)


Я бы сказал, что правильное решение - использовать отдельную строку для ImageView. Это то, что я сделал, и это работает хорошо для меня.

person SparkyNZ    schedule 15.04.2014

Вот макет XML для вас. Элементы GridLayout приведены только для примера, но вы можете использовать их для своих целей, заменив их на кнопки вашего калькулятора.

Как видите, для LinearLayout установлена ​​вертикальная ориентация, а для layout_width и layout_heightmatch_parent, что означает, что они оба будут занимать весь экран. Также есть отступы со всех сторон, чтобы держаться на расстоянии от края экрана.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:orientation="vertical">

<ImageView
    android:id="@+id/imageview"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:background="@drawable/Lighthouse"
    android:layout_marginBottom="10dp"/>

<GridLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:columnCount="4"
    android:orientation="horizontal" >
    <Button
        android:layout_column="3"
        android:text="/" />
    <Button android:text="1" />
    <Button android:text="2" />
    <Button android:text="3" />
    <Button android:text="*" />
    <Button android:text="4" />
    <Button android:text="5" />
    <Button android:text="6" />
    <Button android:text="-" />
    <Button android:text="7" />
    <Button android:text="8" />
    <Button android:text="9" />
    <Button
        android:layout_gravity="fill"
        android:layout_rowSpan="3"
        android:text="+" />
    <Button
        android:layout_columnSpan="2"
        android:layout_gravity="fill"
        android:text="0" />
    <Button android:text="00" />
    <Button
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:text="=" />

</GridLayout>

And here is the final result for this XML layout. The image background on the ImageView is just a simple image I've placed on drawable folder. enter image description here

Если вы хотите узнать больше о том, как использовать GridView с изображениями с автоматическим изменением размера, я сделал учебник по этому поводу. Конечно, вы можете подогнать его под свой случай. Вот ссылка на сообщение.

Надеюсь, это поможет вам.

person rogcg    schedule 16.04.2014