2017-02-21 6 views
1

Я начинаю разрабатывать для Android, и система компоновки кажется довольно сложной по сравнению с iOS. У меня есть RelativeLayout с 4 ImageView s. Самый правый ImageView должен быть вертикально посередине экрана. Остальные 3 ImageView s должны быть размещены слева от него. После перехода от LinearLayout к RelativeLayout (до сих пор не знает, если это был умной), как только я добавляю эту строкуRelativeLayout issues

android:layout_toLeftOf="@id/moto_icon" 

к левым элементам (значок мото- для первого элемента [cloud1], cloud1 для второй элемент и т. д.) исчезают облака ImageView.

Это весь мой файл макета:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="de.manuel_schulze.motorradonline.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

    <LinearLayout 
     android:id="@+id/splashScreen" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/colorPrimary" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:padding="5dp" 
     android:visibility="visible"> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginBottom="8dp" 
      android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/moto_icon" 
       android:layout_width="56dp" 
       android:layout_height="42dp" 
       android:layout_gravity="center" 
       android:src="@drawable/moto_icon"/> 

      <ImageView 
       android:id="@+id/cloud1" 
       android:layout_width="20dp" 
       android:layout_height="20dp" 
       android:layout_gravity="center" 
       android:layout_toLeftOf="@id/moto_icon" 
       android:src="@drawable/cloud"/> 

      <ImageView 
       android:id="@+id/cloud2" 
       android:layout_width="12dp" 
       android:layout_height="12dp" 
       android:layout_gravity="center" 
       android:layout_toLeftOf="@id/cloud1" 
       android:src="@drawable/cloud"/> 

      <ImageView 
       android:id="@+id/cloud3" 
       android:layout_width="16dp" 
       android:layout_height="16dp" 
       android:layout_gravity="center" 
       android:layout_toLeftOf="@id/cloud2" 
       android:src="@drawable/cloud"/> 

     </RelativeLayout> 


     <ImageView 
      android:layout_width="240dp" 
      android:layout_height="64dp" 
      android:layout_gravity="center" 
      android:src="@drawable/motorrad_logo" /> 

    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 

Если я запустить приложение в эмуляторе 3 облака не обнаруживается. В проектной кранке я вижу только синие стрелки.

enter image description here

У вас есть какие-то идеи о том, фиксируя RelativeLayout или альтернатива?

EDIT: То, что я хочу это:

enter image description here

+0

Просто быстрый вопрос, который пришел на мой взгляд, на чтение вашего XML: Почему вы не пишете «содержание» код в файле content.xml? В конце концов, у вас есть этот оператор include:

+0

опубликовать снимок экрана о том, что вам нужно? – rafsanahmad007

+0

@CasualCoder: Вы правы, я переместил его в content_main. Сначала я хотел, чтобы это было в app_bar_main, потому что оно должно отображаться как полноэкранное. Но мне все равно пришлось скрывать ActionBar. Но изображения все еще не появляются. – Brudus

ответ

1

попробуйте следующий код: Замените внутренний LinearLayout android:id="@+id/splashScreen" с:

<LinearLayout 
    android:id="@+id/splashScreen" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:padding="5dp" 
    android:visibility="visible"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="8dp"> 

     <ImageView 
      android:id="@+id/moto_icon" 
      android:layout_width="56dp" 
      android:layout_height="42dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:src="@mipmap/ic_launcher" /> 

     <ImageView 
      android:id="@+id/cloud1" 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_toLeftOf="@id/moto_icon" 
      android:src="@mipmap/ic_launcher" /> 

     <ImageView 
      android:id="@+id/cloud2" 
      android:layout_width="12dp" 
      android:layout_height="12dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_toLeftOf="@id/cloud1" 
      android:src="@mipmap/ic_launcher" /> 

     <ImageView 
      android:id="@+id/cloud3" 
      android:layout_width="16dp" 
      android:layout_height="16dp" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_toLeftOf="@id/cloud2" 
      android:src="@mipmap/ic_launcher" /> 

    </RelativeLayout> 


    <ImageView 
     android:layout_width="240dp" 
     android:layout_height="64dp" 
     android:layout_gravity="center" 
     android:src="@mipmap/ic_launcher" /> 

</LinearLayout> 
+0

Кажется, не работает для меня. Изображения теперь центрированы, но я все еще вижу только Moto_icon. – Brudus

+0

это показывает в моем случае ...удалите эту строку '' и см. ... также убедитесь, что вы заменили весь макет. – rafsanahmad007

+0

Спасибо, сейчас работает. Я думаю, что у меня все еще что-то не хватает. – Brudus

0

Для самого правых изображений установить это:

 android:layout_centerVertical="true" 

это приведет его к центру вертикально

и для остальных сделайте то, что вы делаете, и используйте android:layout_toLeftOf="@id/some_id"

но в этом scenerio ваше самое правильное изображение будет слева, а другие изображения не будут показаны. Я точно не понял, что вы пытаетесь сделать, но для того, чтобы сделать изображение очень централизованным, используйте android:layout_centerInParent="true" или дайте ему достаточно левого поля android:layout_marginLeft="@dimen/some_dimen", чтобы изображения в левой части экрана отображались на экране.

Или simlpy использовать линейную компоновку с горизонтальной ориентацией

надеюсь, что это помогает

редактировать: Я видел изображение сейчас, используйте атрибут centerInParent. Это то, что вам нужно