0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

a-3-3-1(2).EditViewのレイアウトとイベント登録

Last updated at Posted at 2023-05-09

a-3-2-1(2).TextViewのレイアウトとイベント登録

目標設定

一覧に戻る

課題

  1. EditTextの複数行のテキストをXMLから指定することができるか。
  2. EditTextを制約配置(ConstraintLayout)で指定することができるか。
  3. EditTextを列配置(LinearLayout)で指定することができるか。
  4. EditTextのキー編集前のイベントを登録できるか。また、編集キャンセルできるか。

Github

テスト実装

EditTextTestActivity.kt
package com.example.androidtest

import android.os.Bundle
import android.text.Editable
import android.text.InputFilter
import android.text.TextWatcher
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.androidtest.databinding.ActivityEditTextTestBinding

class EditTextTestActivity : AppCompatActivity() {
    lateinit var binding: ActivityEditTextTestBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityEditTextTestBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.editText2EditTextView.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            }

            override fun afterTextChanged(s: Editable?) {
                if (s.toString().length > 8) {
                    Log.d("EditTextTestActivity", "文字制限をオーバーしました")
                } else {
                    Log.d("EditTextTestActivity", "文字制限ないです")
                }
            }
        })

        // 4. EditTextのキー編集前のイベントを登録できるか。また、編集キャンセルできるか。
        // ・可能でした。
        val regexChars = "0-9abc"
        binding.editText2EditTextView.filters = arrayOf(
            InputFilter { source, _, _, _, _, _ ->
                if (source.matches(Regex("[$regexChars]+"))) {
                    source
                } else {
                    source.replace(Regex("[^$regexChars]+"), "")
                }
            })
    }
}
activity_edit_text_test.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <!--
    1. EditTextの複数行のテキストをXMLから指定することができるか。
    ・可能でした。
    2. EditTextを制約配置(ConstraintLayout)で指定することができるか。
    ・可能でした。
    -->
    <EditText
        android:id="@+id/edit_text_1_edit_text_view"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginStart="23dp"
        android:layout_marginEnd="23dp"
        android:layout_marginTop="23dp"
        android:padding="8dp"
        android:inputType="textMultiLine"
        android:text="あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ"
        android:textSize="13sp"
        android:gravity="top|start"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:background="@drawable/style2_edit_text_background"
        tools:ignore="HardcodedText,LabelFor"
        android:autofillHints=""
        tools:targetApi="o" />

    <!--
    3. EditTextを列配置(LinearLayout)で指定することができるか。
    ・可能でした。
    -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginStart="23dp"
        android:layout_marginTop="23dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@id/edit_text_1_edit_text_view"
        >

        <EditText
            android:id="@+id/edit_text_2_edit_text_view"
            android:layout_width="300dp"
            android:layout_height="48dp"
            android:autofillHints=""
            android:background="@drawable/style2_edit_text_background"
            android:gravity="center|start"
            android:inputType="textShortMessage"
            android:maxLength="15"
            android:padding="8dp"
            android:text=""
            android:textSize="13sp"
            tools:ignore="HardcodedText,LabelFor,SpeakableTextPresentCheck"
            tools:targetApi="o" />

        <Space
            android:layout_width="match_parent"
            android:layout_height="8dp" />

        <EditText
            android:id="@+id/edit_text_3_edit_text_view"
            android:layout_width="300dp"
            android:layout_height="48dp"
            android:autofillHints=""
            android:background="@drawable/style2_edit_text_background"
            android:gravity="center|start"
            android:inputType="textShortMessage"
            android:maxLength="15"
            android:padding="8dp"
            android:text=""
            android:textSize="13sp"
            tools:ignore="HardcodedText,LabelFor,SpeakableTextPresentCheck"
            tools:targetApi="o" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
style2_edit_text_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="#c1c1c1" />
            <stroke android:width="4dp" android:color="#7d7d7d" />
            <corners android:bottomLeftRadius="8dp"
                android:bottomRightRadius="8dp"
                android:topLeftRadius="8dp"
                android:topRightRadius="8dp"/>
        </shape>
    </item>
</selector>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?