Beiträge von prototype0815

    Hey folks, ich hab das Problem das ich TextViews, EditText, Spinner und RadioButton Elemente in einem Layout habe, und ich finde einfach keine anständige Lösung das dass Endresultat anständig aussieht, also das die Elemente in einer fürs Auge anständigen Flucht und Ausrichtung positioniert werden.


    Ich habe bisher 2 Ansätze versucht. Es geht rein um das Popup im Vordergrund


    1. LinearLayout horizontal -> 3 LinearLayouts vertical darauf -> und darauf die verschiedenen Elemente... sieht beschissen aus.
    [Blockierte Grafik: http://preview.slick.pics/FUk4v0fAv.png]


    2. RelativeLayout -> dazu Regeln zu den einzelnen Elementen definiert damit diese sich etwas ausrichten... besser aber noch nicht gut.
    [Blockierte Grafik: http://preview.slick.pics/FUk4vjKjV.png]


    Gibts es da nicht irgendein Layout das mich die Elemente linksbündig in einem Raster anordnen lässt? Es sollte natürlich nicht allzu komplex sein, ich denke da so an das GridbagLayout von Java, das beherrsche ich zwar mittlerweile recht gut aber es bringt einen auch gerne mal zur Weißglut :cursing:

    Hey folks, bzw. Admins und Moderatoren ;)


    ich habe öfters das Problem das ich mich nicht anmlden kann. Wenn ich mal ne viertel Stunde warte kann es sein das es dann plötzlich wieder geht.
    Mein Logindaten sind im Browser gespeichert ich kann mich also nicht vertippen :P nachdem klick auf "Einloggen" kommt dieses tolle Fenster das mir sagt das meine Anmeldung erfolgreich war und das ich gleich weitergeleitet werde. Nach wenigen Sekunden werde ich dann auch zum Dashboard weitergeleitet nur steht dann links oben nicht wie gewohnt mein Username, sondern "Anmelden oder Registrieren".
    Deises Spiel lässt sich vermutlich unendlich wiederholen...


    LG proto

    Ist es nicht eher so das es am Programmierstil liegt? Als ich java gelernt habe, war es sozusagen normal "<Klasse> implements ActionListener" zu benutzen und den jeweiligen Elementen dann einfach .setActionListener(this); zu geben.
    mMn. hat das den Vorteil das man alle Actions zentral in einer Methode hat.


    Als ich dann irgendwann mit Android angefangen hab, mit Tutorials usw. war ich erst mal total verwirrt warum denn die Leute z.B. 5 Buttons direkt nacheinander mit separaten Listenern versehen haben :/ . Gehört anscheinend zum Programmierstil und nachdem ich mal, ich glaube sogar hier im Forum, nachgefragt habe konnte mir keiner wirklich sagen warum das so ist.


    Wären wir noch in den Zeiten als nach "Lines of Code" bezahlt wurde, würde ich verstehen warum es sich so entwickelt hat. :P


    Aber ich muss zugeben, das ich in Android auch eher die zweite Variante verwende, da man immer wieder mal ein Codeschnipsel aus dem Internet kopiert und es dort eben so gemacht wird 8)

    Hey folks, ich habe gerade meine App so umgebaut das ich verschiedene "Sprachdateien" nutzen kann.


    Ich habe in meiner Ordnerstruktur meiner App weitere Ordner angelegt, sowie auch passende strings.xml Dateien. Es gibt nun...


    res\values\strings.xml
    res\values-de\strings.xml
    res\values-en\strings.xml


    Setze ich nun meine Locale auf "de" oder "en" wird die passende strings.xml automatisch benutzt -> z.B.( values-de\strings.xml )

    Java
    public static void setLocale(Locale myLocale) {
        Resources res = mContext.getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
    }


    Aber irgendwie finde ich nicht raus wann meine App die strings.xml in dem standard "res\values" Ordner verwendet. Vielleicht weiss das ja schon jemand von euch ?? ;)

    oh man bin ich doof :P ich hab einfach nur meine eigene getString aufgerufen :S :S :S


    Danke erst mal :thumbup:


    Die ganze Methode sieht so aus...Wird die evtl nicht nicht sagen... Ich möchte, wenn die Locale auf "de" oder "en" gesetzt ist, die Texte aus meinen strings.xml benutzen. Die getString Methode nimmt ja automatisch die richtige strings.xml je nach eingestellter Locale.


    Falls nicht deutsch oder englisch eingestellt ist, sucht die Methode nach dem passenden Text Schlüssel in einer .properties Datei, die auf der Maschine liegt zu der meine App verbunden ist. Ist etwas aufwendiger da wir unsere Software in 27 verschieden Sprachen überestzen lassen.


    Beantwortet das deine Frage?

    Desweiteren hat er seine global definierten TextViews nicht mit Textviews in irgendwelchen Layouts verknüpft.

    sobald die TextViews deiner Java Klasse mit einer "ReferenzID" der TextViews eines Layouts verknüpft sind, weiss dein Programm welche Java-Elemente zu welchen View-Elementen gehören. Voraussetzung ist natürlich das du mit setContentView(<Layout>); das passende Layout setzt auf denen diese Elemente definiert sind.


    Danach dann noch aufteilen(); aufrufen und schon sollte es gehen...

    Hey folks, ich möchte gerne mit einem Wert einer <String> Variable den dazugehörigen Text aus der strings.xml holen.


    Natürlich frage ich hier nicht nach ohne vorher danach gesucht zu haben, ich habe "Lösungen" gefunden allerdings funktionieren die bei mir nicht... :-/


    um keine Verwirrung zu stiften was meine Variables.mainActivity ist

    Java
    public static Activity mainActivity;

    sozusagen mein Context...


    Java
    static public String getString(String resourceText) {
        if (Variables.locale.getLanguage().equalsIgnoreCase("en") || Variables.locale.getLanguage().equalsIgnoreCase("de")) {
          int a = Variables.mainActivity.getResources().getIdentifier(resourceText, "string", Variables.mainActivity.getPackageName());
          return getString(a);
        }
    }

    diese Lösung hab ich in einem bekannten englischsprachigen Forum gefunden. Nur erwartet die Methode getString bei mir einen String als Parameter und keinen int... hat da jemand vielleicht eine Idee wie es sonst noch zu bewerkstelligen ist?

    Neuer Tag, neues Glück ! bzw. ein ausgeruhtes Gehirn :P


    [Blockierte Grafik: http://preview.slick.pics/FUaNaWxh0.png]


    Lösung des Problems war das ich mir selbst ein Bein gestellt habe... Ich habe eine zweite "getCustomView" gebaut habe die, eine andere layoutResID benutzt.
    Zeile 70 setDropDownViewResource() überschrieben.
    Zeile 49 eine getCustomDropDownView erstellt, die die layoutResIDdropDown nutzt ( das Checkbox Item )
    und der ganze Trick dabei, in
    Zeile 20 getDropDownView überschreiben und getCustumDropDownView zurück geben lassen.
    Zeile 25 getView überschreiben und getCustumView zurück geben lassen.



    Es gibt nicht "das rcihtige" Layout. Gebe ich dem Adapter die layoutResID mit von der "CustomSpinnerItemCheckbox" dann sieht das ganze so aus...
    [Blockierte Grafik: http://preview.slick.pics/FUaLxsQKp.png]


    Das würde mich ja nicht weiter stören, wenn beim obersten Element die Checkbox nicht zu sehen wäre ( also wenn der Spinner nicht aufgeklappt ist ).


    -------------------------------------------------------------------------------------


    Mein Ziel ist es aber 2 Layouts zu setzen, so wie es mit dem Standard ArrayAdapter auch möglich ist.


    Beim erstellen des Adapters gebe ich die layoutResId mit die für das oberste Element genutzt wird...

    Java
    ArrayAdapter<Locale> adapter = new ArrayAdapter<Locale>(this, R.layout.custom_spinner_item_languages, localeList);


    und danach gebe ich dem Adapter noch die layoutResId für die DropDownElemente...

    Java
    adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);


    Diese Methode wird von meiner selbstgeschriebenen ArrayAdapter ignoriert. und ich habe keine Ahnung wie ich dieses Problem lösen soll...

    Hallo leute, ich versuche gerade einen eigenen ArrayAdapter für einen Spinner zu bauen. Soweit funktioniert alles, bis auf die Optik, die bekomme ich einfach nicht so hin wie ich das möchte.


    Weshalb ich einen eigenen bauen MUSS ist einfach, gefüttert wird der Spinner mit einer localeList...

    Java
    ArrayList<Locale> localeList = new ArrayList<Locale>();



    in einer Locale steht nur die Abkürtung der Landessprache und evtl. noch ein Länderkürzel drin ( z.B. en_GB )
    Benutze ich folgenden einfachen Code, indem ich einfach einen ArrayAdapter benutz...

    Java
    ArrayAdapter<Locale> adapter = new ArrayAdapter<Locale>(this, R.layout.custom_spinner_item_languages, localeList);
        adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);
        localeComboBox = (Spinner) mContext.findViewById(R.id.spinLanguages);
        localeComboBox.setAdapter(adapter);

    sieht mein Ergebnis folgendermaßen aus...
    [Blockierte Grafik: http://preview.slick.pics/FUZT8oD1j.png]
    Die Optik ist hier genau so wie ich es möchte... ist der Spinner zugeklappt ist die Schrift weiß. Quelle -> R.layout.custom_spinner_item_languages


    Doch die DropDownElemente sind blau, mit einer Checkbox
    Quelle -> R.layout.custom_spinner_checkbox_item


    Der Haken dabei ist das ich dem ArrayAdapter den ich benutzt habe nicht sagen kann das er statt dem Sprachkürzel der Locale die ausgeschriebene Variante nehmen soll. Deshalb habe ich selbst einen ArrayAdapter gebaut.

    Java
    CustomSpinnerAdapterLanguage adapter = new CustomSpinnerAdapterLanguage(Language.this, R.layout.custom_spinner_item_languages, localeList);
        adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);
        localeComboBox = (Spinner) mContext.findViewById(R.id.spinLanguages);
        localeComboBox.setAdapter(adapter);

    Der CustomSpinnerAdapterLanguage bekommt die selben Layouts wie vorhin der der Standardlibrary.

    Mein Probelm wird darin liegen das ich der row die falsche layoutResId gebe ( Zeile 32 ) Ich habe aber keine Ahnung wie ich es anders machen soll. Das Ergebnis sieht folgendermaßen aus... Aufgrund das ich in Zeile 42 und 44 die Methode getDisplayLanguage der Locale benutze.
    [Blockierte Grafik: http://preview.slick.pics/FUZT8oKrn.png]
    Dieses mal passt der Text, und das Layout wenn der Spinner zugeklappt ist. Allerdings nimmt er dieses Layout ebenfalls für die DropDown Elemente :-/
    ich habe zwar, wie unter Bild 1 zu sehen ist, mit adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item) das korrekte Layout gesetzt, aber das wird vollkommen ignoriert.


    Vielleicht weiss jemand Rat, wie ich meine ArrayAdapter Klasse wohl verändern muss damit ich verschiedene Layouts für DropDown und nicht-DropDown Elemente setzen kann..

    Habe mich dafür entschieden... Hier schon mal ein Danke an dich :thumbup:


    Möglichkeit 2:
    Activity Login hat eine Instanzvariable/Member, beispielsweise private MainActivity callingActivity = null; mit dazugehörigem Setter.
    Beim ersten Start der App ist diese Variable null, bei jedem weiteren Erzeugen der LoginActivity setzt Du diese Variable auf den Wert der aktuellen MainActivity.


    Der setter für die Variable ist angelegt, nur weiss ich nicht wie ich dran kommen soll... hier der Aufruf der LoginActivity...

    Java
    Intent intent = new Intent(this, Login.class);
          Bundle b = new Bundle();
          b.putInt("options", 777);   //Your id
          intent.putExtras(b);      //Put your id to your Intent
          startActivity(intent);

    Ich habe kein wirkliches Objekt von Login, und wenn ich ein Objekt mache, weiss ich nicht wie ich ein Intent davon mache um die Activity zu starten...

    Hey folks,


    ich habe ein Problem eine Activity zu destroyen die gerade nicht sichtbar ist und in onStop() wartet.
    Ich habe bisher nur 2 Activities, den Rest erledige ich mit Fragementen und ist in diesem Fall nicht von Bedeutung.
    Auf dem Bild habe ich versucht zu veranschaulichen wie meine Activities verbunden sind.


    In der onStop() von Login befindet sich ein finish() Aufruf sodass diese destroyed wird sobald sie nicht mehr sichtbar ist.
    Ich waähle im ersten Schritt eine Maschine aus mit der ich mich verbinden möchte. Ist diese erreichbar wird die MainActivity gestartet und die Login logischerweise destroyed.
    In meiner MainActivity kann ich nun munter vor mich hin arbeiten, bis ich auf die Idee komme ich könnte mich nun mit einer anderen Maschine verbinden. Also rufe ich das OptionsMenu auf und wähle "Verbindungen", dies startet wieder die Login Activity.


    Ab hier gibt es zwei Fälle die ich berücksichtigen muss !!
    [Blockierte Grafik: http://i.slick.pics/FUCkxF6HW.png]
    Fall 1: der User befindet sich wie dargestellt in der LoginActivity ganz rechts und die MainActivity dümpelt wartend in der onStop() herum. Nun fällt dem User ein das er sich gar nicht zu einer anderen Maschine verbinden möchte und benutzt den BackButton um zurück zur Main Activity zu kommen. Das funktioniert wunderbar, da die MainActivity nicht destroyed wurde.


    Fall 2: der User verbindet sich mit einer anderen Maschine, daraufhin wird ein neues Objekt der MainActivity erzeugt und gestartet, ( nun sollte ich eigentlich irgendwie die vorherige Main Activity, die in onStop() wartet, destroyen [ das ist genau das Problem das ich nicht hin bekomme ] ) nach dem start wird wie üblich die Login Activity destroyed.


    Ich kann nun ganz normal mit meiner MainActivity(2) arbeiten. Führe ich das Spiel aus "Fall 2" mehrfach durch habe ich immer mehr MainActivities, und wenn ich den BackButton benutze wird die aktuell sichtbare destroyed und ich komme in die vorherige zurück, dann wieder destroyen und in die vorherige zurück, .....bis alle gekillt wurden.


    Ich hoffe ich konnte mein Problem verständlich schildern.


    LG proto

    Hey folks 8)


    mir ist aufgefallen das sich die Position an der das OptionsMenu aufploppt sich verändert, und zwar wenn ich keine ActionBar habe ist es an der Position Bottom-Center. Mit ActionBar -> Top-Right, und mit ActionBar die aber nicht sichtbar ist dank hide() -> Top-Left.


    Da ich eine ActionBar für einen NavigationDrawer brauche, diese aber mit hide() verborgen habe taucht mein OptionsMenu Top-Left auf und das finde ich dezent sch****e.


    Gibts ne Möglichkeit das das zu ändern?


    LG proto

    Hey folks 8)


    warum zeigt mir diese tolle IDE eigentlich nicht immer alle Möglichkeiten die zu dem aktuellen Element passen an? Das ist mir schon öfters aufgefallen aber nun würde ich es gerne mal wissen, und habe sogar ein konkretes Beispiel das sich wunderbar reproduzieren lässt.


    Bei meinem PagerTabStrip wollte ich einen eigenen Style für den Text setzen...


    XML
    <android.support.v4.view.PagerTabStrip
                android:id="@+id/pager_title_strip"
                android:textAppearance="@style/PagerTabStripText"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:background="#353F3E"
                android:paddingBottom="8dp"
                android:paddingTop="5dp"
                android:textColor="#ffff"
                />

    wenn ich nun anfange zu schreiben schlägt er mir bei "an.." -> "android" vor. Schreibe ich weiter "app.." -> "..." kommt nix ?(
    Schreibe ich "tex.." -> "textDirection" und "textAlignment", aber kein "textAppearance".


    So da ich einen Codeschnipsel im Internet gefunden habe bei dem das so drin steht, versuche ich es einfach mal von Hand zu schreiben, und siehe da es funktioniert wunderbar.


    Wisst ihr warum das so ist ???

    Wieder mal vielen Dank Marco :thumbup:
    Lösung:

    Java
    case 2:
            DigIO digIO = new DigIO();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.content_frame, digIO);
            ft.addToBackStack(DigIO.TAG);
            ft.commit();
            fm.executePendingTransactions();
            break;

    und wenn man in der onBackPressed() die "super.onBackPressed()" nicht gleich am Anfang aufruft dann funktioniert das ganze auch wie gewollt :P


    Hey folks, wieder mal ein kleines (Verständnis-)Problem worauf ihr sicher eine schnelle Lösung wisst.


    Ich starte mit meiner MainActivity folgendes layout.xml


    Also einfach nur ein leeres FrameLayout das ich zum ersetzen durch Fragmente "content_frame" genannt habe.
    Wenn der User nun ein Item auf dem NavigationDrawer auswählt wird das FrameLayout ( content_frame ) durch das neue Fragment ersetzt.


    NavDrawer...
    [Blockierte Grafik: http://preview.slick.pics/FUAUV2V23.png]


    Java
    DigIO digIO = new DigIO();
    //        digIO.setMainActivity();
            fm = getFragmentManager();
            ft = fm.beginTransaction();
            ft.replace(R.id.content_frame, digIO);
            ft.commit();
            fm.executePendingTransactions();

    Nun wird auf meiner MainActivity das neue Fragment angezeigt.
    Aus rein logischen Gründen sollte es nun auch möglich sein, das der User durch drücken der "Back"Taste auf das "leere" FrameLayout zurück wechseln kann.


    Diesen Ansatz wollte ich wie folgt lösen. Ich habe ein weiteres leeres Fragment erstellt das ich nun per Fragment replace() auf mein FrameLayout ( content_frame ) legen will. Da die App aber dennoch mit der Back-Taste zu beenden sein soll habe ich dieses Konstrukt ausgedacht.
    Wenn irgendein Fragment angezeigt wird, dann tausche es durch das MainBlankFragment.
    Wenn MainBlankFragment visible ist dann beende die App.


    Nur funktioniert das ganze nicht wie gedacht das meine MainActivity trotzdem beendet wird.
    Vielleicht weiss ja jemand Rat, möglich das ich auch einen komplett falschen Ansatz gewählt habe.


    LG proto