RelativeLayout не отображает все мои виджеты - PullRequest
0 голосов
/ 25 октября 2010

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

Я пробовал несколько вариантов, но неизбежно некоторые из моих кнопок отсутствуют.

В этой версии примера кнопки up и left отсутствуют. Если я сначала объявлю кнопку up и поместу кнопку tile относительно нее, то отобразится up. Требует ли RelativeLayouts, чтобы верхний виджет был объявлен первым? Угадайте, нет смысла для layout_above тогда ...

Я не могу публиковать изображения (низкая репутация), но вы можете посмотреть результат здесь .

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

<ImageView
        android:id="@+id/tile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5px"
        android:layout_centerInParent="true"
        android:src="@drawable/loading"
        />

<Button
        android:id="@+id/up"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/tile"
        android:layout_centerHorizontal="true"
        android:drawableLeft="@drawable/up"
        />
<Button
        android:id="@+id/left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/tile"
        android:layout_centerVertical="true"
        android:drawableLeft="@drawable/left"
        />
<Button
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/tile"
        android:layout_centerVertical="true"
        android:drawableLeft="@drawable/right"
        />
<Button
        android:id="@+id/down"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_centerHorizontal="true"
        android:drawableLeft="@drawable/down"
        />

<Button
        android:id="@+id/in"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_alignParentLeft="true"
        android:text="@string/test_in"
        />
<Button
        android:id="@+id/out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tile"
        android:layout_alignParentRight="true"
        android:text="@string/test_out"
        />
</RelativeLayout>

1 Ответ

0 голосов
/ 25 октября 2010

Виджеты действительно должны быть объявлены, прежде чем на них можно будет ссылаться, по крайней мере, до Android 2.2.Вы можете попробовать что-то вроде ниже, я не уверен, как вы хотели, чтобы кнопки In / Out были размещены, но это должно дать общее представление:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<Button 
    android:id="@+id/up" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" 
    android:drawableLeft="@drawable/up" 
    /> 
<Button 
    android:id="@+id/left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true" 
    android:drawableLeft="@drawable/left" 
    /> 
<Button 
    android:id="@+id/right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true" 
    android:drawableLeft="@drawable/right" 
    /> 
<Button 
    android:id="@+id/down" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" 
    android:drawableLeft="@drawable/down" 
    /> 
<Button 
    android:id="@+id/in" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true" 
    android:text="@string/test_in" 
    /> 
<Button 
    android:id="@+id/out" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true" 
    android:text="@string/test_out" 
    />
<ImageView 
    android:id="@+id/tile" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="5px" 
    android:layout_above="@id/down"
    android:layout_toRightOf="@id/left"
    android:layout_toLeftOf="@id/right"
    android:layout_below="@id/up"
    android:layout_gravity="center"
    android:src="@drawable/loading" 
    /> 
</RelativeLayout>

По сути, вы хотите разместить стрелки иСначала кнопки ввода / вывода, выровненные по родительскому элементу (главное окно).Затем используйте выше / ниже / RightOf / LeftOf, чтобы определить края плитки карты.Я не уверен, использует ли ImageView layout_gravity или просто гравитацию (я всегда путаю их), но если нет, просто попробуйте другой.Это от макушки моей головы - не проверено - поэтому дайте мне знать, если что-то странное случится.

РЕДАКТИРОВАТЬ: Второе предложение.Это больше похоже на вашу (я не думал о том, что карта не является fill_parent), но использовал гравитацию вместо centerHorizontal, и использовал просто layout_above / under / left / right вместо alignParent **.

<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >   
<ImageView  
    android:id="@+id/tile"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_margin="5px"  
    android:gravity="center"
    android:src="@drawable/loading"  
    />  
<Button  
    android:id="@+id/up"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_above="@id/tile"
    android:gravity="center_horizontal"  
    android:drawableLeft="@drawable/up"  
    />  
<Button  
    android:id="@+id/left"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_toLeftOf="@id/tile"
    android:gravity="center_vertical"
    android:drawableLeft="@drawable/left"  
    />  
<Button  
    android:id="@+id/right"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_toRightOf="@id/tile"
    android:gravity="center_vertical"
    android:drawableLeft="@drawable/right"  
    />  
<LinearLayout
    android:id="@+id/bottom"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/tile"
    android:gravity="center_horizontal"
    >   
<Button  
    android:id="@+id/out"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="@string/test_out"  
    android:padding="5dp"
    />
<Button  
    android:id="@+id/down"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:drawableLeft="@drawable/down"  
    android:padding="5dp"
    /> 
<Button  
    android:id="@+id/in"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:text="@string/test_in"  
    android:padding="5dp"
    />
</RelativeLayout> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...