Anfängerfragen:Dynamisch erzeugter EditText mit underline? Suche ein gutes Tutorial bzw Buch etc. was mir hilft Dinge Dynamisch zu Programmieren

K

KuehlesBlondes

Neues Mitglied
0
Hallo Leute,
ich bin neu im Android Studio Universum und habe meine erste App Programmiert, die ich für die Uni programmieren musste. Mir fehlt nur eine Sache, die will einfach nicht! Das ist bei einem dynamisch erzeugten EditText diese durchgezogene Line zu erzeugen.
Desweiteren suche ich gute Tutorials, Bücher etc.
Ich danke euch für eure Hilfe.
1592915562290.png


Java:
package android.dr.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.InputType;
import android.text.method.ScrollingMovementMethod;

import javax.crypto.Cipher;
import java.io.*;
import android.util.Base64;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.MultiAutoCompleteTextView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Toast;

import java.nio.charset.StandardCharsets;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

public class MainActivity extends AppCompatActivity implements OnClickListener {
    LinearLayout parent;
    LinearLayout myButtons;
    TableLayout myKeys;
    TableRow row1, row2, row3, row4;
    String eingabe;
    String[] passwortString=new String[10];
    String[] password=new String[10];
    String Data;
    Button key1, key2, key3, key4, key5,
            key6, key7, key8, key9, key0,
            keyok, keyoptik;
    SharedPreferences Prefs;
    SharedPreferences.Editor PerfSEditor;
    EditText edittext;
    int count=0;
    int check=0;
    int start=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        parent = (LinearLayout) findViewById(R.id.ll1);
        parent.setOrientation(LinearLayout.VERTICAL);
        myButtons = (LinearLayout) getLayoutInflater().inflate(R.layout.del_save, null);
        myKeys = (TableLayout) getLayoutInflater().inflate(R.layout.passwortkey, null);
        Button b1 = new Button(this);
        b1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        b1.setId((int) 1);
        b1.setText("New CodeStore");
        b1.setTag(1);
        b1.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);

        b1.setTag("probe");
        Prefs = this.getSharedPreferences("data", MODE_PRIVATE);
        PerfSEditor = Prefs.edit();
        edittext = new EditText(this);
        edittext.setSingleLine(false);
        edittext.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
        edittext.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
        edittext.setLines(5);
        edittext.setMaxLines(8);
        edittext.setVerticalScrollBarEnabled(true);
        edittext.setMovementMethod(ScrollingMovementMethod.getInstance());
        edittext.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
        edittext.setHint(Prefs.getString("gespeichert", "Kein Text gespeichert"));

        if (!(edittext.getHint().equals("Kein Text gespeichert"))) {
            start = 1;
            password();

        }
        else
            parent.addView(b1);


        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                displayCodeStore();
            }
        });
    }


    public void displayCodeStore() {


        Button save2 = new Button(this), delete3 = new Button(this);
        parent.removeAllViews();


        //EditText

        //Buttons
        parent.addView(edittext);
        parent.addView(myButtons);
        save2 = findViewById(R.id.save2);
        delete3 = findViewById(R.id.delete3);
        save2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
//Speichern

                if (edittext.getText().length() == 0) {

                        Toast.makeText(getApplicationContext(), "Kein Text zum Speichern", Toast.LENGTH_LONG).show();
                    }
               else{
                    Toast.makeText(getApplicationContext(),"Ist jetzt"+start,Toast.LENGTH_SHORT).show();
                    start=0;
                    password();
            }}});

        //Löschen
        delete3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!(edittext.getHint().equals("Kein Text gespeichert"))) {
                    final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
                            .setTitle("Daten wirklich Löschen?")
                            .setMessage("Ok zum bestätigen cancel zum Abbrechen")
                            .setPositiveButton("ok", null)
                            .setNegativeButton("cancel", null)
                            .show();
                    Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
                    positiveButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            PerfSEditor.remove("gespeichert");
                            PerfSEditor.commit();
                            edittext.setHint("");
                            edittext.setText("");
                            dialog.dismiss();
                            Toast.makeText(getApplicationContext(), "Gelöscht", Toast.LENGTH_LONG).show();
                            finish();
                        }


                    });
                } else
                    Toast.makeText(getApplicationContext(), "keine Daten zum Löschen", Toast.LENGTH_SHORT).show();
            }
        });

    }






    public void password() {
        key1 = new Button(this); key2 = new Button(this); key3 = new Button(this); key4 = new Button(this); key5 = new Button(this);
                key6 = new Button(this); key7 = new Button(this); key8 = new Button(this); key9 = new Button(this); key0 = new Button(this);
                keyok = new Button(this); keyoptik = new Button(this);
        password[0]="1";
        password[1]="2";
        password[2]="3";
        password[3]="4";
        EditText edittext2;

        ArrayList<Integer> zufallzahlen = new ArrayList<Integer>(10);
        parent.removeAllViews();
        myKeys = new TableLayout(this);
        row1 = new TableRow(this);
        row2 = new TableRow(this);
        row3 = new TableRow(this);
        row4 = new TableRow(this);

        TableLayout.LayoutParams LayoutParams = new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        TableRow.LayoutParams RowParams = new TableRow.LayoutParams();
        row1.setLayoutParams(RowParams);
        RowParams.column = 2;
        myKeys.setLayoutParams(LayoutParams);
        row1.setLayoutParams(LayoutParams);


        row1.addView(key1);
        row1.addView(key2);
        row1.addView(key3);
        row2.addView(key4);
        row2.addView(key5);
        row2.addView(key6);
        row3.addView(key7);
        row3.addView(key8);
        row3.addView(key9);
        row4.addView(key0);
        row4.addView(keyok, RowParams);
        myKeys.addView(row1);
        myKeys.addView(row2);
        myKeys.addView(row3);
        myKeys.addView(row4);
        parent.addView(myKeys);

        for (int i = 0; i <= 9; i++) {
            zufallzahlen.add(i);
        }
        Collections.shuffle(zufallzahlen);

        key0.setText(Integer.toString(zufallzahlen.get(0)));
        key1.setText(Integer.toString(zufallzahlen.get(1)));
        key2.setText(Integer.toString(zufallzahlen.get(2)));
        key3.setText(Integer.toString(zufallzahlen.get(3)));
        key4.setText(Integer.toString(zufallzahlen.get(4)));
        key5.setText(Integer.toString(zufallzahlen.get(5)));
        key6.setText(Integer.toString(zufallzahlen.get(6)));
        key7.setText(Integer.toString(zufallzahlen.get(7)));
        key8.setText(Integer.toString(zufallzahlen.get(8)));
        key9.setText(Integer.toString(zufallzahlen.get(9)));
        keyok.setText("Eingabe");
        keyok.setOnClickListener(this);
        key1.setOnClickListener(this);
        key2.setOnClickListener(this);
        key3.setOnClickListener(this);
        key4.setOnClickListener(this);
        key5.setOnClickListener(this);
        key6.setOnClickListener(this);
        key7.setOnClickListener(this);
        key8.setOnClickListener(this);
        key9.setOnClickListener(this);
        key0.setOnClickListener(this);
        key0.setId((int) 10);
        key1.setId((int) 11);
        key2.setId((int) 12);
        key3.setId((int) 13);
        key4.setId((int) 14);
        key5.setId((int) 15);
        key6.setId((int) 16);
        key7.setId((int) 17);
        key8.setId((int) 18);
        key9.setId((int) 19);
        keyok.setId((int) 20);


    }
    @Override
    public void onClick(View v) {

        switch(v.getId()) {

            case 10:
                passwortString[count] = key0.getText().toString();
                ++count;
                break;
            case 11:
                passwortString[count] = key1.getText().toString();
                ++count;
                break;
            case 12:
                passwortString[count] = key2.getText().toString();
                ++count;
                break;
            case 13:
                passwortString[count] = key3.getText().toString();
                ++count;
                break;
            case 14:
                passwortString[count] = key4.getText().toString();
                ++count;
                break;
            case 15:
                passwortString[count] = key5.getText().toString();
                ++count;
                break;
            case 16:
                passwortString[count] = key6.getText().toString();
                count++;
                break;
            case 17:
                passwortString[count] = key7.getText().toString();
                count++;
                break;
            case 18:
                passwortString[count] = key8.getText().toString();
                count++;
                break;
            case 19:
                passwortString[count] = key9.getText().toString();
                count++;
                break;
            case 20:


                /**Überprüfen ob Passwort eingeben wurde*/
                if(passwortString[0]==null)
                    /**Toast wenn kein Passwort eingeben wurde zur aufforderrung*/
                    Toast.makeText(getApplicationContext(),"Bitte Passwort eingeben",Toast.LENGTH_SHORT).show();
                    /**Wenn Password eingeben wurde forschleife und EingabeString mit Passwortsting verlgeichen*/
                else {
                    for (int i = 0; i < passwortString.length; i++) {
                       /**check bleibt solange gleich bis eine Zahl nicht übereinstimmt*/
                        if (password[i] == passwortString[i])
                            check = 1;
                        /**wenn eine Zahl nicht passt wird check Null gestzt*/
                        else {
                            check = 0;
                            break;
                        }
                    }

                    /**
                     * Wenn check gleich Null ist passwortString wird mit Null gefüllt und durch ein Rekrusiven Aufruf Passwort neugestartet
                     */
                    if(check==0) {
                        Toast.makeText(getApplicationContext(), "Passwort falsch", Toast.LENGTH_SHORT).show();
                        for (int i = 0; i < passwortString.length; i++) {
                            passwortString[i] = null;
                        }
                        count = 0;
                        password();
                    }
                    /** Wenn check = 1 ist dann werden die Daten gespeichert*/
                   else if (check == 1&&start==0) {
                        Toast.makeText(getApplicationContext(), "Passwort stimmt", Toast.LENGTH_SHORT).show();
                        eingabe = edittext.getText().toString();
                        byte[] byteeingabearry = new byte[0];
                        try {
                            byteeingabearry = eingabe.getBytes("UTF-8");
                        } catch (UnsupportedEncodingException e) {

                        }
                        Data=Base64.encodeToString(byteeingabearry,0);

                        PerfSEditor.putString("gespeichert",Data );
                        PerfSEditor.commit();
                        edittext.setText("");
                        edittext.setHint(Prefs.getString("gespeichert", "Kein Text gespeichert"));
                        Toast.makeText(getApplicationContext(), "gespeichert wurde: " + eingabe + "", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                        else{
                             start=0;
                             byte[] data=Base64.decode((Prefs.getString("gespeichert", "Kein Text gespeichert")),0);
                             String ausgabe=new String(data, StandardCharsets.UTF_8);
                             PerfSEditor.putString("gespeichert",ausgabe );
                             PerfSEditor.commit();
                             edittext.setHint(Prefs.getString("gespeichert", "Kein Text gespeichert"));
                             displayCodeStore();
                    }

                    break;
                }
            default:
                password();
        }




}
}

XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

     <LinearLayout
    android:id="@+id/ll1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="8dp"
    android:orientation="vertical"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="MissingConstraints">


</LinearLayout>


</androidx.constraintlayout.widget.ConstraintLayout>


XML:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout 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">



</TableLayout>

XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/save_del"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:ignore="NamespaceTypo">

    <Button
        android:id="@+id/save2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/save" />

    <Button
        android:id="@+id/delete3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/delete" />

</LinearLayout>
 
Zuletzt bearbeitet:
Hallo Kühles Blondes,

das Aussehen der UI Elemente hängt vom verwendeten Theme,der Android Version und vom Hersteller ab.

Es sei denn, man verwendet Custom-Controls.

Custom View Components | Android Developers

Dabei vererbst du den EditText in deine eigene deklarierte Klasse und überschreibst für dich relevante
Funktionen.
 
Zuletzt bearbeitet:

Ähnliche Themen

C
  • CoderboyPB
Antworten
3
Aufrufe
936
sportspirit
sportspirit
H
Antworten
4
Aufrufe
611
HTCUserRay
H
H
Antworten
0
Aufrufe
612
Hcman
H
Zurück
Oben Unten