2013-03-21 13 views
5

Próbuję użyć układu względnego z niestandardową klasą, która rozszerza widok, oraz kilka przycisków. To, co ostatecznie ma to wyglądać tak:Android - układ XML vs programowy

http://imgur.com/B5MtdJ7

(wybacz mi za zamieszczenie linku zamiast obrazu, widocznie nie jestem jeszcze wystarczająco schłodzić)

Obecnie ten jest ustalony z wysokości w dp (zobacz XML poniżej), a istnieją dwa problemy z tym:

  • wygląda dopuszczalne tylko na ekranie Nexusa 7, a nie innego urządzenia OnDraw
  • obu widoków niestandardowych spotkali hod nadal udostępnia płótno o wysokości i szerokości, które dokładnie pasują do rozdzielczości urządzenia.

Jeśli spróbuję ustawić wartość layout_height na wartość wrap_content, każdy niestandardowy widok podejmie próbę obejrzenia całego ekranu, co wydaje się zgodne z punktem 2 , ale wyraźnie nie jest to, czego chcę.

Co chcę osiągnąć, to układ względny z dwoma niestandardowymi widokami, który wygląda dokładnie tak, jak pokazano na obrazku, ale skaluje się do rozmiarów ekranu, na którym siedzi, a niestandardowe widoki na płótno faktycznie wiedzą, jak duże część ekranu, na którym siedzi. Jak mam to zrobic?

Edycja: powodem, dla którego jest to "vs programmatyczne", jest to, że uważam, że przesłonięcie miarą nie byłoby złym okrzykiem, ale nie mam pojęcia, jak to wpłynęłoby na XML. Wolę definicję layoutu w jednym miejscu.

Moje XML jest poniżej:

<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:orientation="vertical" 
tools:context=".TrajectoryView" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" > 

    <com.sportsim.virtualcricket.view.SideProfileView 
     android:id="@+id/side_profile_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </com.sportsim.virtualcricket.view.SideProfileView> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" > 

    <com.sportsim.virtualcricket.view.BirdsEyeView 
     android:id="@+id/birds_eye_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:text="Button" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:text="Button" /> 
</LinearLayout> 

Odpowiedz

1

Byłoby to dość łatwe przy użyciu LinearLayout i ciężarów. Podałem przykład poniżej, ale nie mogę go przetestować w tej chwili. Powinien jednak zapewnić pewien kierunek.

<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:orientation="vertical" 
tools:context=".TrajectoryView" > 

<com.sportsim.virtualcricket.view.SideProfileView 
    android:id="@+id/side_profile_view" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5"/> 

<com.sportsim.virtualcricket.view.BirdsEyeView 
    android:id="@+id/birds_eye_view" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" 
    android:orientation="horizontal"> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:text="Button" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:text="Button" /> 

</LinearLayout> 
</LinearLayout> 
+0

Dzięki, oddam to, gdy wrócę do domu. Czy zachowa to stan przycisków (tj. Każdy z nich zajmie połowę szerokości ekranu i będzie obok siebie?) Nie jest to wielka sprawa, ponieważ jest to tylko działanie testowe, ale chciałbym dowiedz się, co mogę z tego – Imran

+0

Ok, zmienię go tak, aby przyciski były obok siebie. Teraz powinno być dobrze. Ponownie, nie testowałem tego i ogólnie zagnieżdżone ciężary są szkodliwe dla wydajności. Możesz zastąpić LinearLayout, który jest używany do ustawiania pozycji przycisku za pomocą RelativeLayout. –

+0

Ah nice, yeah RelativeLayout rzecz brzmi całkiem nieźle - okrzyki człowiek: D – Imran