質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1856閲覧

Kotlin ボタンのテキストをユーザーが編集できるようにしたい

emiri_py

総合スコア17

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/01/01 11:27

編集2019/01/01 13:08

プログラミング初心者です。
Android studioを用いてアプリ開発を行いたいのですが、その際に、ボタンのテキストをユーザーが編集できるようにしたいです。
例えば、初めはボタンに「グループ1」等と記載してあり、アプリをダウンロード後、ユーザーがその名称を自由に編集できるようにしたいです。
ボタンはボタンとして使用できる状態を保持したいです。例)ボタンを押したら画面遷移できる。

以下のような方法を考えたのですが、プログラミング初心者でありまったくコードの書き方がわかりません…。
KotlinもしくはJavaを用いてご教示いただけますと幸いです。

ボタンの後ろにEditTextを配置し、別のボタンを押すとEditTextが前に配置されてテキストが編集可能になる

言語

Kotlin Java

コード (Activity)

package com.example.user.memo import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.Button class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_Main) // 画面遷移 ボタン val button: Button = this.findViewById(R.id.button1) button.setOnClickListener { val intent: Intent = Intent(this, NextActivity::class.java) startActivity(intent) } } }

コード (Layout)

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"> <Button android:text="グループ1" android:layout_width="150dp" android:layout_height="60dp" android:id="@+id/button1" android:textSize="24sp" /> </android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/01/01 12:21

その、ボタンに「グループ1」等と記載してあるというコードを提示してください
emiri_py

2019/01/01 13:08

コメントありがとうございます! 追記致しました。
guest

回答1

0

ベストアンサー

やりたいことの想像も以下の通りできているし、

ボタンの後ろにEditTextを配置し、別のボタンを押すとEditTextが前に配置されてテキストが編集可能になる

レイアウトの方法/ボタンのクリックイベントの処理方法もわかっているようですので、もうあと数歩がんばるだけだと思います。

ここまでできているので、あえてソースは載せずにその数歩を助ける知識&ヒントを書きます。

  • View には表示/非表示を制御する visibility という属性がある。
  • Button の text は Kotlin 上で直接 text 属性に値を設定することで変更できる。
  • EditText のテキスト変更イベントは EditText.addTextChangedListener で登録できる。

以上の知識を元に

  • 非表示状態の EditText を最初から配置しておく。
  • ボタン名称変更 Button に EditText の表示/非表示を切り替えるイベントを割り当てる。
  • EditText のテキスト変更イベイトでテキストの変更を拾って Button のテキストを書き換える。

とすればやりたいことができるでしょう。

追記:やりたいことの調べ方

まず重要なのはやりたいことをどうやって実現するのか「想像」します。できる/できないは置いといてどういう感じにしたいのかを「想像」します。
これは既にやっていますね?以下のようなことです。

ボタンの後ろにEditTextを配置し、別のボタンを押すとEditTextが前に配置されてテキストが編集可能になる

これがとても重要です。想像さえできれば実際に1つ1つやってみましょう。

このとき可能ならば作っているプログラムは触らずに、お試し用のプログラムを別に新規で作り直した方がいいです。
なぜなら作成中のプログラムには着目したいポイントとは関係ない要素が詰まっていて試行錯誤の邪魔になるからです。
例えば着目ポイントがいくつかの画面を遷移した先の画面にあるとしましょう。試行錯誤で何度も何度も試すのに毎回画面遷移するの面倒ですよね?
知らないことを知る試行錯誤は誰でもすごく疲れるものなので、余計なものを排除し、集中して効率を上げることはとても重要です。
効率を上げられなければ疲れ果てて諦めることになります。
試行錯誤が終わってから本当のプログラムに組み込みましょう。こうすることでゴミの混入も防げます。

試行錯誤できる環境が整ったら自分がやりたいことを実現する方法を探します。
これにはいくつも方法がありますが、代表的なものをいくつか教えます。

  • インテリセンスで「それっぽい」メソッドを探す。

Android Studio で Ctrl + Space を押すとメソッドの候補一覧を表示できます。メソッド名の英単語で「それっぽいもの」を探します。

Android Platform APIs からパッケージを辿って対象のクラスを探してもいいし、右上の検索窓にクラス名を入れて検索してもいいし、そもそも「Android クラス名」でググっても概ねここに来れると思います。

  • やりたいことを直接ググる。

サンプルを探してそれでどんなメソッドを使っているかを見ても良いです。
ドンピシャでやりたいことが見つかることはほとんどないので、やりたいことを小さい要素に分解して1つずつ検索しないとヒットしないでしょう。
ググり方は試行錯誤とそれによる経験則がモノをいいます。

「それっぽい」ってところが重要です。やりたいことの想像ができていればメソッド名でピンと来ます。
斜め読みでざっと探せるので時間は掛からないはずです。
「それっぽい」のが見つかったら実際に書いてみて動きを見ます。
ピンと来るもの見つからないならそれは最初「想像」の「発想」が悪かったのかもしれません。別の方法を考えます。
やりたいことを実現する方法は決して1つではないです。いくつものやり方が考えられるのがほとんどです。

例えば今回のを実現するのに以下の2つの考え方があります。

  • 必要時に EditText を配置して、不要になったら撤去する。
  • 必要時に EditText を表示して、不要になったら非表示にする。

ちなみにどっちもできます。
前者なら ViewGroup.addView/removeView を使います。初期レイアウトに配置しません。
後者なら View.visibility を使います。初期レイアウトに非表示で配置します。
これは経験則ですが、後者の方が簡単なので後者を紹介しました。別にやりたいことができるなら前者でも構わないと私は思います。
むしろ勉強時は思いついた方法を全てやってみてその差を比較して実感するなどした方が経験則を増やせますよ。

投稿2019/01/04 08:41

編集2019/01/06 00:25
toydev

総合スコア297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

emiri_py

2019/01/05 16:24

ご丁寧にご教示いただきありがとうございます! 上記ヒントを基に試行錯誤してみたいと思います!
emiri_py

2019/01/05 16:26

初心者で調べ方もわからないため、visibilityやEditText.addTextChangedListenerなど名称も教えていただけて非常に助かりますm(_ _)m
toydev

2019/01/06 00:21

調べ方を補足に書きました。 「想像」するという基礎ができているので、後はやり方を覚えるだけですよ。
emiri_py

2019/01/12 14:16

返事が遅くなってしまい申し訳ございません。 追記ありがとうございます! 調べ方まで教えていただき誠にありがとうございます! リファレンス見てどんなメソッドがあるのか勉強したいと思いますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問