2010-11-03 2 views
1

Я пытаюсь создать экран (в портретном режиме), который отображает 4 изображения (одинаковый размер, предназначенный для масштабирования по размеру экрана), занимая весь экран, разбивая экран на квадранты (высокая, 2x2 сетка) , Это будет действовать в качестве основного типа активности, и каждое изображение должно быть доступно для интерактивного просмотра, чтобы перейти к другому действию.Какая компоновка используется для меню с изображением 2x2?

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

Я также попытался использовать TableLayout, разместив 2 изображения в каждом из двух строк. Визуально это работало отлично. К сожалению, при использовании этого я не могу ссылаться на элементы ImageView в TableLayout в моем коде активности (findViewById всегда возвращает null).

Я чувствую, что TableLayout на самом деле не является «правильной вещью», но я хотел бы услышать, что говорят другие. В любом случае, что нужно сделать для выполнения моих желаемых функций?

Спасибо.

Редакция 1.1: Относительная компоновка работает намного лучше для того, чтобы выстроить элементы. Теперь я просто остался с проблемой, когда findViewById всегда возвращает null. Вот мой код до сих пор:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@color/homescreen_bgcolor" 
     > 
    <ImageView id="@+id/one" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:src="@drawable/item1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 
    <ImageView id="@+id/two" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentRight="true" 
       android:src="@drawable/item2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 
    <ImageView id="@+id/three" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentLeft="true" 
       android:src="@drawable/item3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 
    <ImageView id="@+id/four" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentRight="true" 
       android:src="@drawable/item4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"/> 
    </RelativeLayout> 

public class HomeScreenActivity2 extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.homescreen2); 

    ImageView imageView = (ImageView) findViewById(R.id.one); 


    imageView.setClickable(true); 
    imageView.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
     Log.i("Test", "test"); 
     } 
    }); 
    } 
} 

ответ

0

Я думаю, что TableLayout может работать для вас, но я бы рекомендовал попробовать RelativeLayout, а также. Вы можете в основном привязать свои изображения к четырем квадрантам, используя комбинации

android:layout_alignParentTop="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true"` 

на ваших изображениях.

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

+0

Я дал ему попробовать, и я все еще возникают проблемы. Я опубликовал редактирование на мой оригинальный пост. См. Редактирование 1 выше. – Sam

+0

Я выяснил свою проблему с findViewById: я игнорировал ошибку в атрибуте id. Вместо id = "@ + id/four" Мне нужен андроид: id = "@ + id/four". Сейчас все хорошо. – Sam

1

Вот пример макета, показывающий, как вы можете достичь сетки 2 X 2, которая покрывает весь экран, используя только RelativeLayout.

<RelativeLayout 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" > 

<View 
    android:id="@+id/centerVerticalShim" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_centerVertical="true" 
    android:visibility="invisible" /> 

<View 
    android:id="@+id/centerHorizontalShim" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_centerHorizontal="true" 
    android:visibility="invisible" /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/centerVerticalShim" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_toLeftOf="@+id/centerHorizontalShim" 
    android:background="#42A5F5" 
    android:gravity="center" 
    android:text="@string/one" 
    android:textColor="#FFFFFF" > 
</TextView> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/centerVerticalShim" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/centerHorizontalShim" 
    android:background="#EF5350" 
    android:gravity="center" 
    android:text="@string/two" 
    android:textColor="#FFFFFF" > 
</TextView> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/centerVerticalShim" 
    android:layout_toLeftOf="@+id/centerHorizontalShim" 
    android:background="#66BB6A" 
    android:gravity="center" 
    android:text="@string/three" 
    android:textColor="#FFFFFF" > 
</TextView> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/centerVerticalShim" 
    android:layout_toRightOf="@+id/centerHorizontalShim" 
    android:background="#5C6BC0" 
    android:gravity="center" 
    android:text="@string/four" 
    android:textColor="#FFFFFF" > 
</TextView></RelativeLayout> 

Приведенные выше результаты макета в этом:

 Смежные вопросы

  • Нет связанных вопросов^_^