Anfänger: Frage zu Layout

  • Antworten:6
Daniel Kehl
  • Forum-Beiträge: 6

17.03.2011, 16:47:55 via Website

Hi zusammen,
bin ein Anfänger und habe mal eine einfache Frage bezüglich Layouts. Ich hätte gerne so etwas gemacht: Das "Fenster" (wie nennt man das bei Android?) soll vertikal in zwei Teile aufgeteilt sein:
- oben (so ca. 75 % der Fensterhöhe, mit der ID contentLayout) soll der Inhalt angezeigt werden.
- unten (so ca. 25 % der Fensterhöhe, mit der ID bottomControls) sollen so ein kleines Menü angezeigt werden mit Buttons / Icons

Wie realisier ich das am Besten? Ich habe mal angefangen mit Linearlayout: und zwar so:
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:weightSum="10" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" >
3
4 <LinearLayout android:id="@+id/contentLayout" android:orientation="vertical" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="600px">
5 <!-- Hier wird der Haupt-Inhalt angezeigt -->
6 <Button android:id="@+id/beispielContent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Beispiel" />
7
8 </LinearLayout>
9
10
11 <HorizontalScrollView android:layout_height="200px" android:id="@+id/bottomControls" android:layout_width="fill_parent" android:scrollbars="none">
12
13 <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" >
14 <!-- Hier werden dann die Menü Buttons eingefügt -->
15 </LinearLayout>
16 </HorizontalScrollView>
17
18
19</LinearLayout>


Also soweit ich weis, kann ich layout_height nicht in Prozent angeben.
Also habe ich mir gedacht, mit Java Code die Höhe von contentLayout und bottomControls auszurechnen und dann zu setzen.

Das hab ich so versucht, indem ich die Höhe von System hole:
1getWindowManager().getDefaultDisplay().getHeight());

Aber das ist dann doch nicht so ganz das wahre, weil da z.B. die Notificationsbar auch noch dabei ist.

1LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
2mainLayout.getHeight();

Aber irgendwia gibt mir mainLayout.getHeight() immer 0.


Verfolge ich da einen völlig falschen Ansatz oder wie macht man so etwas normalerweise, dass die App auf allen Handy-Screens funktioniert?

— geändert am 17.03.2011, 16:54:59

Antworten
L3322
  • Forum-Beiträge: 467

17.03.2011, 22:36:05 via App

schau dir mal layout:weight an!

"Hard work beats talent, when talent fails to work hard"

Antworten
Frank W.
  • Forum-Beiträge: 5.103

18.03.2011, 11:50:32 via Website

Hallo Daniel! Herzlich Willkommen bei AndroidPIT!! :lol:

Zusätzlich nimm die ganzen "harten" layout:hight Angaben raus. Und wenn du mal damit arbeitest, ist "px" immer schlecht. Besser sind Einheiten wie z.B. "dip", die Auflösungsunabhänig arbeiten. Normalerweise sollte layout_hight="wrap_content" mit den richtigen "weight"-Einstellungen bei deinem Vorhaben die besten Ergebnisse bringen.

"Irgendwann, möglicherweise aber auch nie, werde ich dich bitten, mir eine kleine Gefälligkeit zu erweisen." (Don Corleone) Für ein friedliches Miteinander"

Antworten
Daniel Kehl
  • Forum-Beiträge: 6

18.03.2011, 14:43:02 via Website

Hi,
danke für die Hilfe!

mit layout:weight habe ich schon versucht bevor ich hier gepostet habe, allerdings habe ich da noch nicht gewusst dass das eigentlich im normalfall nur mit wrap_content Sinn macht (Danke Frank Wolfram für den Hinweis, könnte aber auch irgendwo in der Documentation stehen, oder ich habs übersehen).

Ich hab da aber noch eine Frage zu layout:weight ... Irgendwo hab ich mal gelesen dass die Summe der weights 1 ergeben muss. Aber ich glaube dass war nur für ältere Android plattformen der Fall oder? Den ab 2.1 gibts auch nocht das layout:weightSum. Ist das optional oder muss man das angeben?

— geändert am 18.03.2011, 15:06:29

Antworten
Frank W.
  • Forum-Beiträge: 5.103

18.03.2011, 15:02:22 via Website

Du kannst meines Wissens weightsum immernoch angeben. Macht bei deiner Anwendung aber nicht so viel Sinn, weil du eigentlich nur einmal weight nutzen musst. Nämlich genau bei deinem contentlayout. Die Buttons unten kannst du einfach mit wrap_content "bestücken". Die nehmen sich dann genau die Höhe, die sie brauchen und den Rest bekommt der obere Teil.
Mit weightsum habe ich noch nicht gearbeitet, wird aber erst interessant, wenn man weight bei mehreren Elementen nutzt.

Frank

"Irgendwann, möglicherweise aber auch nie, werde ich dich bitten, mir eine kleine Gefälligkeit zu erweisen." (Don Corleone) Für ein friedliches Miteinander"

Antworten
Daniel Kehl
  • Forum-Beiträge: 6

18.03.2011, 15:06:49 via Website

Danke,

ein anderes Problem:

Das mit den dip macht sinn! Danke für den Tipp.
Nur habe ich da ein Problem:
Ich sage ein Element (id bottomControls) hat layout_height="200dip".

Nun möchte ich, dass dieses Element eine Hintergrundgrafik anzeigt. Meine Frage: Wie hoch in normale "computer pixeln" muss ich diese grafik machen, dass sie immer korrekt angezeigt wird? Ich habe dazu hier diese Formel gefunden:
pixels = dps * (density / 160)

aber density ist systemabhängig, wie mach ich dass dann am besten?

Antworten