| |||||||
Das Thema "Layoutproblem" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 22.06.2010
Beiträge: 37
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
| ich erzeuge in meiner App Labels, Eingabefelder und Buttons und das in unterschiedlichen Mengen. Um Objekte in einer Reihe plazieren zu können, habe ich das auf einem TableLayout gemacht. Dazu kommt noch die Anforderung, dass oben eine Gallery steht und unten Buttons angezeigt werden sollen. Aussehen solld as ganze dann ungefähr so: ![]() Wobei Gallery und Buttonbereich zur Seite scrollen sollen und der Rest nach unten. Meine Layoutdatei hat zur Zeit diesen Inhalt: Code: <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/basisscrollview"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/basislayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="0, 1, 2,3">
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:longClickable="true"
android:unselectedAlpha="0.6"
/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/titelzeile"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textStyle="bold">
</TextView>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/no_connection"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/noConnection"
android:visibility="invisible"
android:textStyle="bold">
</TextView>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</WebView>
<TableRow>
</TableRow>
</TableLayout>
</ScrollView> Nun muss aber noch eine schnelle Liste mit SectionIndexer dazu und damit habe ich ein Problem. So wie ich das sehe, brauche ich dafür zwingend ein LinearLayout, aber ich bekomme das nicht vernünftig integriert. Ich habe alles mögliche probiert und bekomme meist einen Absturz und manchmal die indizierte Liste in einem sehr schmalen Bereich und der Rest des Displays bleibt leer. Kann mir einer Starthilfe geben? In welcher Reihenfolge müssen die Layouts in der Formatdatei stehen? |
| | |
| | #2 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Ich hätte es anders gelöst: Code: <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/button2"
android:layout_width="fill_parent"></Button>
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"></ListView>
<Button
android:text="Button"
android:id="@+id/button1"
android:layout_height="wrap_content"
android:layout_width="fill_parent"></Button>
</LinearLayout> So wie ich dein Vorhaben verstanden habe, machst du dir das Leben zu schwer. Ich hoffe ich konnte helfen ;-)
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
| | #3 (permalink) |
| Junior Mitglied Registriert seit: 22.06.2010
Beiträge: 37
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Hallo v Ralle v, Danke, das bringt mich schon einmal einein großen Schritt weiter, ABER: 1. meine Dialoge auch länger werden können, muss ich scrollen können und habe daher eine ScrollView um alles herum gelegt. Das ist so ok, oder? 2. Über den Button unten links schalte ich jetzt um zwischen TableLayout (Für Dialoge und mehrspaltige Liste) und der ListView (für die Fastscroll-Liste mit Indexer). Das Umschalten ist ok, aber wie kann ich die Größe korrigieren? Es starten jetzt beide Views sichtbar und das TableLayout nimmt sich soviel Platz, wie es gerade benötigt. Dementsprechend klein wird die ListView. Beim Umschalten ändere ich mit SetVsibility() die Sichtbarkeit, aber die Größen bleiben unverändert. Wie kann ich da eingreifen? Oder ist mein Ansatz falsch?? ![]() Hier das Layout: Code: <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/basisscrollview" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery" android:layout_width="fill_parent"
android:layout_height="32px" android:longClickable="true"
android:unselectedAlpha="0.6" />
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/titelzeile" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:gravity="center_horizontal"
android:text="Titelzeile" android:textStyle="bold">
</TextView>
<TableLayout android:id="@+id/tableLayout1"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:text="TextView" android:id="@+id/textView1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TableRow android:layout_width="wrap_content" android:id="@+id/tableRow1"
android:layout_height="wrap_content">
<TextView android:id="@+id/textView2" android:layout_width="wrap_content"
android:text="@string/hello" android:layout_height="wrap_content"></TextView>
<EditText android:text="EditText" android:id="@+id/editText1"
android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
</TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:text="TextView" android:id="@+id/textView3"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:text="EditText" android:id="@+id/editText2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
</TableRow>
</TableLayout>
<ListView android:id="@+id/listView1" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1.0">
</ListView>
<TextView android:id="@android:id/empty"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Liste ist leer" />
<ScrollView android:id="@+id/scrollView1"
android:layout_height="wrap_content" android:layout_width="1000px">
<LinearLayout android:layout_width="wrap_content"
android:id="@+id/linearLayout3" android:layout_height="fill_parent">
<ImageButton android:layout_width="wrap_content"
android:src="@drawable/icon" android:layout_height="wrap_content"
android:paddingLeft="15px" android:id="@+id/buSwitch"></ImageButton>
<ToggleButton android:id="@+id/toggleButton1"
android:layout_width="wrap_content" android:text="ToggleButton"
android:layout_height="wrap_content"></ToggleButton>
</LinearLayout>
</ScrollView>
</LinearLayout>
</ScrollView> Code: package com.acut_edv.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.TableLayout;
import android.widget.ToggleButton;
public class LayoutTester extends Activity {
// FastScroll-Demo von http://www.anddev.org/tutalphabetic_fastscroll_listview_-_similar_to_contacts-t10123.html
ToggleButton schalter = null;
TableLayout table = null;
ListView myListView = null;
ArrayList<String> elements;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageButton bu = (ImageButton) findViewById(R.id.buSwitch);
schalter = (ToggleButton) findViewById(R.id.toggleButton1);
table = (TableLayout) findViewById(R.id.tableLayout1);
myListView = (ListView) findViewById(R.id.listView1);
bu.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setViews();
}});
// elements
String s = "QWERTZUIOPASDFGHJKLYXCVBNM";
Random r = new Random();
elements = new ArrayList<String>();
for (int i = 0; i < 300; i++) {
elements.add(s.substring(r.nextInt(s.length())));
}
Collections.sort(elements); // Must be sorted!
// listview
myListView.setFastScrollEnabled(true);
MyIndexerAdapter<String> adapter = new MyIndexerAdapter<String>(
getApplicationContext(), android.R.layout.simple_list_item_1,
elements);
myListView.setAdapter(adapter);
}
public void setViews(){
schalter.setChecked(!schalter.isChecked());
if (schalter.isChecked()) {
table.setVisibility(View.VISIBLE);
myListView.setVisibility(View.INVISIBLE);
} else {
table.setVisibility(View.INVISIBLE);
myListView.setVisibility(View.VISIBLE);
}
table.invalidate();
myListView.invalidate();
}
class MyIndexerAdapter<T> extends ArrayAdapter<T> implements SectionIndexer {
ArrayList<String> myElements;
HashMap<String, Integer> alphaIndexer;
String[] sections;
public MyIndexerAdapter(Context context, int textViewResourceId,
List<T> objects) {
super(context, textViewResourceId, objects);
myElements = (ArrayList<String>) objects;
// here is the tricky stuff
alphaIndexer = new HashMap<String, Integer>();
// in this hashmap we will store here the positions for
// the sections
int size = elements.size();
for (int i = size - 1; i >= 0; i--) {
String element = elements.get(i);
alphaIndexer.put(element.substring(0, 1), i);
//We store the first letter of the word, and its index.
//The Hashmap will replace the value for identical keys are putted in
}
// now we have an hashmap containing for each first-letter
// sections(key), the index(value) in where this sections begins
// we have now to build the sections(letters to be displayed)
// array .it must contains the keys, and must (I do so...) be
// ordered alphabetically
Set<String> keys = alphaIndexer.keySet(); // set of letters ...sets
// cannot be sorted...
Iterator<String> it = keys.iterator();
ArrayList<String> keyList = new ArrayList<String>(); // list can be
// sorted
while (it.hasNext()) {
String key = it.next();
keyList.add(key);
}
Collections.sort(keyList);
sections = new String[keyList.size()]; // simple conversion to an
// array of object
keyList.toArray(sections);
// ooOO00K !
}
@Override
public int getPositionForSection(int section) {
// Log.v("getPositionForSection", ""+section);
String letter = sections[section];
return alphaIndexer.get(letter);
}
@Override
public int getSectionForPosition(int position) {
// you will notice it will be never called (right?)
Log.v("getSectionForPosition", "called");
return 0;
}
@Override
public Object[] getSections() {
return sections; // to string will be called each object, to display
// the letter
}
}
} |
| | |
| | #4 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
du kannst keine listview in eine scrollview packen. zumindest können schon, nur wirst du damit nicht glücklich werden.
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| | #5 (permalink) |
| Junior Mitglied Registriert seit: 22.06.2010
Beiträge: 37
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
|
Dann vergiss die ScrollView, die kann ich ja auch nur um die Tabelle legen. Das eigentliche Problem ist, dass die ListView klein bleibt, auch wenn das TableLayout unsichtbar wird. Wie bekomme ich es hin, dass die ListeView den freigewordenen Bereich ausfüllt? |
| | |
| | #6 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Um ehrlich zu sein blicke ich bei deinem Vorhaben nicht mehr durch ^^ Vielleicht helfen Screenshots von dem, was du bisher hast. Setzt du die Visibility auf Invisible oder Gone? Denn bei Invisible bleibt der Platz für eine View reserviert, bei Gone wird der Platz durch andere Views gefüllt.
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
| Folgender Benutzer bedankt sich bei v Ralle v für diesen Beitrag: | Gibbsnich (22.09.2011) |
| | #7 (permalink) | ||
| Junior Mitglied Registriert seit: 22.06.2010
Beiträge: 37
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
| Zitat:
![]() Im Ernst: Oben soll eine Gallery und eine Titelzeile stehen, dann kommen in dem TableLayout je nach gesendeten Daten Dialoge oder Listen und das sieht ungefähr so aus: ![]() (Nicht erschrecken wgen dem Layout: Ist nur testweise ;-) Alternativ kommt aber auch die ListView zum Einsatz für eine einspaltige Liste mit alphabetischem Index und das sieht ungefähr so aus: ![]() Ich möchte also entweder TableLayout *oder* die ListView. In jedem Fall aber oben die Gallery und die Titelzeile und unten die Buttons. Ich hoffe, das ist verständlich ausgedrückt ?Zitat:
Was jetzt noch hakt, sind lange Dialoge. Wenn ich das TableLayout in eine ScrollView bette, überlagert der Dialog mir die Buttons unten. Wie kann ich der ScrollView klarmachen, dass unten noch etwas steht? | ||
| | |
| | #8 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Hm das klingt etwas komisch. Schachtel die ScrollView nochmal in ein LinearLayout, das könnte klappen. Ungefähr so: Gallery LinearLayout -->ScrollView -->-->TableLayout Button unten
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
| | #9 (permalink) | |
| Junior Mitglied Registriert seit: 22.06.2010
Beiträge: 37
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
| Zitat:
LinearLayout -->Gallery -->TextView Titel -->LinearLayout für TableLayout -->-->ScrollView für TableLayout -->-->-->TableLayout -->-->-->-->TableRow -->-->-->-->-->TextView -->-->-->-->-->TextView -->-->-->-->-->... -->-->-->-->/TableRow -->-->-->/TableLayout -->-->/ScrollView -->/LinearLayout -->ListView für indizierte Liste -->/ListView -->ScrollView für Buttons unten -->-->LinearLayout für Buttons -->-->-->ImageButton -->-->-->... -->-->/LinearLayout -->/ScrollView /LinearLayout> Puuhhhh.... DANKE v Ralle v !!! | |
| | |
| | #10 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Ja sieht ziemlich überladen aus ^^ Denk auch dran, dass die Performance darunter leidet. Dazu gibt es auch irgendwo einen Artikel (glaube das stand in dem zum Hierarchy Viewer), dass man nur eine maximale Grenze an Views nutzen soll. Die sollte zwar noch nicht erreicht sein, aber nur als Info ;-) Freut mich aber, dass es funktioniert
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| ScrollView - Layoutproblem -> dringend! | Chaoz | Android App Entwicklung | 8 | 26.04.2010 11:13 |