Entwicklung von Android-Anwendungen (sowohl Java- als auch Kotlin-kompatibel) Wie implementieren Sie dies? ~ Button Edition ~

Dieser Artikel ist der erste von "Entwicklung von Android-Anwendungen: Wie implementieren Sie dies?"

Das Hauptziel ist (willkürlich) die Annahme "Anfänger und Fortgeschrittene, die bald Google gelernt haben" wie ich. Da es sowohl Java als auch Kotlin erklärt, sagen auch diejenigen, die sagen: "Ich verstehe die Implementierung in Java, aber wie schreibt man sie in Kotlin?" Ich hoffe es wird nützlich sein.

Ein Beispiel für dieses Projekt finden Sie unter dem folgenden Link. Der Hauptzweig ist der Kotlin-Quellcode und der Java-Zweig ist der Java-Quellcode.

https://github.com/Dai1678/SampleCodePrograms

Button-Implementierung

Ich denke, es ist das erste, was mich beeindruckt, wenn ich anfange, Android-Apps zu entwickeln.

Als Beispiel

Das habe ich versucht.

Umgebung

Android Studio 3.0+ Bestätigter Betrieb unter Android 8.0

Fügen Sie der Gradle-Datei die folgende Anweisung hinzu, da die Schaltfläche "Floating Action" verwendet wird.

build.gradle


apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "net.ddns.dai.samplecodeprograms"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:27.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

Betriebsdemo

ButtonSampleActivity.gif

Erklärung von XML

Die Art und Weise, wie FloatingActionButton umgeschrieben wird, ist je nach Root-Tag etwas anders. Bitte beachten Sie entsprechend dem Layout der Anwendung, die Sie machen.

activity_button_sample.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:orientation="vertical"
    tools:context="net.ddns.dai.samplecodeprograms.ButtonSampleActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Über die Implementierung von Button" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:id="@+id/changeText"
                android:text="Bitte drücken"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:id="@+id/textChangeButton"
                android:text="Button"/>

         </LinearLayout>

         <android.support.design.widget.FloatingActionButton
             android:id="@+id/fab"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="bottom|end"
             android:layout_margin="@dimen/fab_margin"
             app:srcCompat="@android:drawable/btn_star" />

         <!-- @dimen/fab_margin -> 16dp -->

     </FrameLayout>

</LinearLayout>

Der wichtige Teil ist, dass der Inhaltsteil von FrameLayout umgeben ist. FrameLayout wird verwendet, wenn Sie View überlappend anzeigen möchten. Weil es einen schwebenden Aktionsknopf gibt. Es ist zu beachten, dass die Komponenten in diesem Layout nicht positioniert werden können (alle oben links angezeigt). Platzieren Sie die Komponenten, indem Sie LinearLayout einfügen.

In diesem Fall kann die Position der schwebenden Aktionstaste als "android: layout_gravity =" bottom | end "" angegeben werden.

Sie müssen FrameLayout nicht verwenden, da Sie sie an relativen Positionen platzieren können. Es ist in Ordnung, wenn Sie die Position wie ↓ angeben.

activity_button_sample.xml


<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email" />

Wie ich später erklären werde, ist es in Ordnung, über FloatingActionButton genauso nachzudenken wie über das relative Layout. Wenn Sie beim Erstellen einer neuen Aktivität die Option Basisaktivität auswählen, wird diese standardmäßig verwendet. Wenn Sie es noch cooler verwenden möchten, sollten Sie es vielleicht verwenden?

Erklärung der Aktivität

Ich denke, es gibt verschiedene Möglichkeiten, die Tastenverarbeitung zu beschreiben. Es gibt zwei Möglichkeiten, wie ich es richtig benutze. Ich werde kurz in Java und Kotlin mit Quellcode erklären.

Java Edition

--Wenn es nur einen Button-Prozess gibt (FloatingActionButton wird als Beispiel weggelassen)

ButtonSampleActivity.java


public class ButtonSampleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_sample);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null){
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        boolean flag = false;

        Button button = findViewById(R.id.textChangeButton);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                TextView textView = findViewById(R.id.changeText);

                if (flag){
                    textView.setText("Bitte drücken");
                    button.setText("BUTTON");
                    flag = false;

                }else{
                    textView.setText("Taste wurde gedrückt!");
                    button.setText("Rückkehr");
                    flag = true;
                }
             }
         });
    }
}

Dies ist eine Methode, die häufig in Beispielcode eingeführt wird, der auf vielen Websites und Android-Entwicklern veröffentlicht wird. Ich verwende eine anonyme Klasse innerhalb der onCreate-Methode. Wenn Sie ein oder zwei Schaltflächen haben, können Sie dies auf diese Weise tun.

--Wenn es mehrere Button-Prozesse gibt

ButtonSampleActivity.java


public class ButtonSampleActivity extends AppCompatActivity implements View.OnClickListener {

    Button button;
    boolean flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_sample);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null){
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        button = findViewById(R.id.textChangeButton);
        button.setOnClickListener(this);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.textChangeButton:
                TextView textView = findViewById(R.id.changeText);

                if (flag){
                    textView.setText("Bitte drücken");
                    button.setText("BUTTON");
                    flag = false;

                }else{
                    textView.setText("Taste wurde gedrückt!");
                    button.setText("Rückkehr");
                    flag = true;
                }

                break;

            case R.id.fab:
                Snackbar.make(view, "fabelhaft wurde gedrückt!", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
                break;
        }
    }
}

Wenn Sie keine anonymen Klassen verwenden möchten, implementieren Sie OnClickListener. Bitte schreiben Sie zunächst in die erste Zeile. Wenn Sie eine Fehlermeldung mit der roten Linie erhalten, verwendet die rote Sprechblase die Methode publick void onClick (View view) {} unter Android Studio. Sie werden aufgefordert, eine zu erstellen. Wenn Sie diese ausführen, wird automatisch eine Methode für Sie erstellt. (Du kannst es selbst schreiben)

Bei der onClick-Methode wird die ID der in xml angegebenen Schaltfläche von "view.getId ()" erfasst und die Verarbeitung aufgeteilt.

FindViewById und setOnClickListener (this) können leicht vergessen werden. Achtung! (Es kann durch Verwendung von Butter Knife oder Data Biding vereinfacht werden, aber ich wollte nicht, dass es sich wesentlich vom vorhandenen Schreibstil ändert. Nicht eingeführt. )

Kotlin Ausgabe

Es ist auch in build.gradle geschrieben, aber hier haben wir kotlin-android-extensions eingeführt. Dies ist sehr praktisch. Sie können den in xml angegebenen ID-Namen so verwenden, wie er ist, und die Codemenge kann sehr gering sein.

--Wenn es nur einen Button-Prozess gibt

ButtonSampleActivity.kt


class ButtonSampleActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_button_sample)

        val actionBar = supportActionBar
        actionBar!!.setDisplayHomeAsUpEnabled(true)

        var flag = false

        //kotlin-android-Dank der Erweiterungen können Sie die ID von xml angeben, ohne einen Satz von findViewById zu schreiben! !!
        textChangeButton.setOnClickListener { view ->
            flag = if (flag){
                    changeText.text = "Bitte drücken"
                    textChangeButton.text = "BUTTON"
                    false

                }else{
                    changeText.text = "Taste wurde gedrückt"
                    textChangeButton.text = "Rückkehr"
                    true
                }
        }

    }
}

Es ist viel sauberer als der Java-Quellcode, nicht wahr? Keine findViewById, nutzlose Nullprüfungen, onClick und Semikolon! Okay, lass uns jetzt mit Kotlin anfangen ()

--Wenn es mehrere Button-Prozesse gibt

ButtonSampleActivity.kt


class ButtonSampleActivity : AppCompatActivity(), View.OnClickListener {

    private var flag = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_button_sample)

        val actionBar = supportActionBar
        actionBar!!.setDisplayHomeAsUpEnabled(true)

        //kotlin-android-Dank der Erweiterungen können Sie die ID von xml angeben, ohne einen Satz von findViewById zu schreiben! !!
        textChangeButton.setOnClickListener(this)   
        fab.setOnClickListener(this)

    }

    override fun onClick(view: View) {

        when (view.id){     //Da es keine switch-Anweisung gibt, verwenden Sie die when-Anweisung
            R.id.textChangeButton -> {
                this.flag = if (flag){
                    changeText.text = "Bitte drücken"
                    textChangeButton.text = "BUTTON"
                    false

                }else{
                    changeText.text = "Taste wurde gedrückt"
                    textChangeButton.text = "Rückkehr"
                    true
                }
            }

            R.id.fab -> {
                Snackbar.make(view, "fabelhaft wurde gedrückt!", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show()
            }
        }
    }
}

Dies ist auch eine Methode zum Schreiben der onClick-Methode außerhalb der onCreate-Methode. Was ich über diesen Quellcode wissen möchte, ist, dass er sich von Java unterscheidet.

Was für ein Ort wie.

Referenz

Es beschreibt detailliert den Charme und die Notation von Kotlin.

Vorschau beim nächsten Mal

Schreiben Sie um Text wie TextView und EditText.

Nachwort

Ich würde es gerne Junioren an der Universität zeigen, aber ich wäre dankbar, wenn Qiita-Benutzer Kommentare abgeben könnten, wenn Nachfrage besteht. Wenn Sie Fehler haben, stellen Sie bitte eine Korrekturanfrage.

Recommended Posts

Entwicklung von Android-Anwendungen (sowohl Java- als auch Kotlin-kompatibel) Wie implementieren Sie dies? ~ Button Edition ~
Entwicklung von Android-Anwendungen (sowohl Java- als auch Kotlin-kompatibel) Wie implementieren Sie dies? ~ Textausgabe ~
Zusammenfassung der guten Punkte und Vorsichtsmaßnahmen bei der Konvertierung der Java Android-Anwendung in Kotlin