Einige Fragen zur Android Entwicklung

  • Antworten:11
Nils K.
  • Forum-Beiträge: 7

06.03.2014, 17:26:07 via Website

Hi,
das ist mein erster Post hier. Ich bin eigentlich iOS Entwickler und entwickle eigentlich Apps für iPad, iPhone, iPod Touch. Nun möchte ich für meine Projekt, welches ich bald präsentiere einen Android Click Dummy erstellen. Ich habe mir gedacht, kann ja nicht so schwer sein und mir einfach mehrere Bücher zum Thema genommen und gelesen. Hätte nicht gedacht, dass der Unterschied so krass ist! Ich finde es unter Android umständlicher irgendwie zu programmieren aber das ist Gewöhnungssache und ich möchte hier keinen Glaubenskrieg entfachen. Ich hatte gestern von einer bekannten zum ersten mal ein Android Tablet (Samsung Galaxy Tab 3) in der Hand und habe mit viel Mühe und Not meine App drauf installiert. Nun zu meinen Fragen:
  1. Ist es normal, dass man die Tastatur nur mit den Zurück-Button ausblenden kann?
  • Ich habe in der App mir 4 Tabs eingebaut. Wenn ich jetzt im ersten Tab bin und da im Textfeld die Tastatur aufrufe und dann den Tab Wechsel ist die Tastatur immer noch da. Geht die irgendwie weg? Gibt es da Delegate-Methoden oder Notifications?
  • Immer wenn ich das Gerät drehe, sind die Tabellenzellen (ich vermisse meine Delegate-Methoden!) die ich mit Mühe und Not hinzugefügt habe weg. Ist das Standard oder liegt das an mir? Hier mein Code:
    1final EditText calculatorTextField = (EditText) findViewById(R.id.calculatorTextfield);
    2 calculatorTextField.setOnKeyListener(new View.OnKeyListener() {
    3 public boolean onKey(View v, int keyCode, KeyEvent event) {
    4 // If the event is a key-down event on the "enter" button
    5 if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
    6 (keyCode == KeyEvent.KEYCODE_ENTER)) {
    7
    8 DoubleEvaluator evaluator = new DoubleEvaluator();
    9 Double result = evaluator.evaluate(calculatorTextField.getText().toString());
    10
    11 TableLayout tableView = (TableLayout) findViewById(R.id.tableView);
    12
    13 TableRow row = new TableRow(getBaseContext());
    14
    15 TextView calculation = new TextView(getBaseContext());
    16 calculation.setTextSize(18);
    17 calculation.setText(calculatorTextField.getText().toString());
    18
    19 TableRow.LayoutParams paramsLeft = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f);
    20 paramsLeft.setMargins(20, 0, 0, 0);
    21
    22 calculation.setWidth(0);
    23 calculation.setLayoutParams(paramsLeft);
    24
    25 TextView resultOfCalculation = new TextView(getBaseContext());
    26 resultOfCalculation.setTextSize(18);
    27 resultOfCalculation.setText(result.toString());
    28
    29 TableRow.LayoutParams paramsRight = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f);
    30 paramsRight.setMargins(0, 0, 20, 0);
    31
    32 resultOfCalculation.setWidth(0);
    33 resultOfCalculation.setLayoutParams(paramsRight);
    34 resultOfCalculation.setGravity(Gravity.RIGHT);
    35
    36 row.addView(calculation);
    37 row.addView(resultOfCalculation, paramsRight);
    38 tableView.addView(row);
    39
    40 calculatorTextField.setText("");
    41 return true;
    42 }
    43 return false;
    44 }
    45 });

Viele Grüße
Nils

— geändert am 06.03.2014, 17:28:19

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 17:37:46 via Website

Für was brauchst du delegate methoden?
In Java/Android benutzt man dafür Interfaces, da sind keine Delefgates vorgesehen.
Dann zur Tastatur, wenn das dich stört, dass die Immernoch da ist, kannst du diese auch ausblenden. (Zurück Button ist standart, kannst du aber ändern)
http://stackoverflow.com/questions/1109022/close-hide-the-android-soft-keyboard
Wenn du das Gerät drehst, dann wird die Activity neu generier, es sei den du hast dies abgschaltet.
Um das neuerstellen der Oberfläche zu verhindern, musst du das in deine Manifest datei eintragen:
http://developer.android.com/guide/topics/manifest/activity-element.html#config (schau dir dabei die Screen Orientation an.)

Objective-C und Java sind halt unterschiedliche Programmiersprachen, aber wnn man die Struktur und so weiter verstanden hat, ist die Syntax nicht schwieriger als bei jeder anderen prgm Sprache.

LG Pascal //It's not a bug, it's a feature. :) ;)

Nils K.

Antworten
Nils K.
  • Forum-Beiträge: 7

06.03.2014, 17:51:38 via Website

Vielen Dank! Das hört sich gut an, schaue ich mir alle an! Danke!

Ist eben ungewohnt.

— geändert am 06.03.2014, 17:51:57

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.03.2014, 19:44:44 via Website

Der Tip das drehen zu verhindern ist eher eine Bad Practice als ein wirklich sinnvoller Tip.

Wenn du Dynamisch Elemente hinzufügst und z.b nicht per XML Layout deklarierst sind die weg :) Das System baut alles ab und baut es wieder neu auf!
Daher ist es wichtig im XML Layout entsprechende IDs zuvergeben so das dass System den zustand selbst wieder herstellen kann.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 19:52:35 via Website

@Mac: Das drehen wird doch garnicht verhindert, nur die Activity soll nicht neugestartet werden, sodass das Layout bestehen bleitbt.
Was ist denn deimer Meinung nach die bessere Lösung, damit die Activity nicht neu geladen wird?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Andreas S.
  • Forum-Beiträge: 76

06.03.2014, 22:57:17 via Website

Der Punkt ist, dass die Activity neu geladen werden muss damit das Framework automatisch zu einem anderen Layout wechseln kann.

Zum Beispiel, wenn man sowas implementieren möchte:

http://developer.android.com/design/patterns/multi-pane-layouts.html

Man verliert einfach viele Möglichkeiten, die einem das Framework bietet, wenn man das Zerstören der Activtiy verhindert.

Mac Systems

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.03.2014, 23:24:23 via Website

Yep, es gibt fast keinen Grund das einzusetzen. Bei einem Spiel mag das irgendwo noch vertretbar sein.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Nils K.
  • Forum-Beiträge: 7

07.03.2014, 16:23:39 via Website

Das mit den drehen mag zwar nicht so gut sein, aber die App soll erstmal nur ein Dummy werden und muss schnell fertig werden. Wenn es dann richtig an die Umsetzung geht wird so und so alles neu.

Ich habe jetzt ein neues Problem: In iOS am iPad habe ich mir einfach ein SplitViewController genommen und den dann eben im Hochformat 2 ViewController nebeneinander angezeigt (heißt glaube ich unter Android Fragments) und in Hochformat kann man einfach auf ein BarButtonItem klicken und der Controller, der vorher die kleiner Fläche war (meistens ein TableView) fährt dann von rechts als Popover ein. Kann man das irgendwie unter Android auch realisieren ohne das Rad neu erfinden zu müssen? Also im Querformat geht es wohl mit Fragments (dazu habe ich ein Tutorial, kann den Link aber hier nicht posten weil dann ein Error kommt) Aber wie mache ich den Popover im Hochformat?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

07.03.2014, 16:27:50 via Website

Du meinst einen Dialog ? DialogFragment ist dein Freund

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Nils K.
  • Forum-Beiträge: 7

07.03.2014, 16:36:21 via Website

Einen Dialog nicht direkt. Ein Popover ist ein wie ein View, den man aber ein und ausblenden kann. Wenn du mal googlest, kannst du auch Bilder finden dazu "UIPopoverController". Ich kann hier keine Links senden :( Also darin ist dann der ganze TableView im Hochformat enthalten und wenn man dann auf das BarButtonItem klickt wird dieser Popover eingeblendet.

— geändert am 07.03.2014, 16:36:30

Antworten
Nils K.
  • Forum-Beiträge: 7

07.03.2014, 18:04:38 via Website

Danke! Schaue ich mir an.

Antworten