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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

967閲覧

EditTextから取得した文字に2桁区切りで記号を入れたい

arumazirou

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/09/03 08:31

前提・実現したいこと

MACアドレスを登録するためのActivityを作成中です。
EditTextに入力した文字列に2桁区切りで:を挿入して、SharedPreferencesに保存したいのですが上手くいきません。どなたかご教授いただければ幸いです。

また、EditTextに文字を入力する際に、2桁入力されるごとに記号を挿入する方法があればそちらもよろしくお願いいたします。

該当のソースコード

Java

1import android.annotation.SuppressLint; 2import android.app.AlertDialog; 3import android.content.DialogInterface; 4import android.content.Intent; 5import android.content.SharedPreferences; 6import android.os.Build; 7import android.os.Bundle; 8import android.text.InputFilter; 9import android.text.InputType; 10import android.text.Spanned; 11import android.view.Gravity; 12import android.view.View; 13import android.widget.Button; 14import android.widget.EditText; 15import android.widget.TextView; 16import android.widget.Toast; 17 18import androidx.annotation.RequiresApi; 19import androidx.appcompat.app.AppCompatActivity; 20 21import java.util.Locale; 22import java.util.Objects; 23 24public class PrefActivity extends AppCompatActivity { 25 26 private SharedPreferences dataStore; 27 private EditText editText; 28 private TextView textWrite, textRead; 29 30 @SuppressLint("WrongConstant") 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_pref); 35 36 // "DataStorage"という名前でインスタンスを生成 37 dataStore = getSharedPreferences("DataStorage", MODE_APPEND); 38 39 editText = findViewById(R.id.edit_text); 40 InputFilter[] myFilters = {alphabetFilter, new InputFilter.LengthFilter(17)}; // 大文字+アルファベットフィルタ+長さフィルタ 41 editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); 42 editText.setFilters(myFilters); 43 44 //保存ボタン 45 textWrite = findViewById(R.id.text_write); 46 //呼び出しボタン 47 textRead = findViewById(R.id.text_read); 48 49 Button btnBack = findViewById(R.id.back); 50 if (btnBack != null) { 51 btnBack.setOnClickListener(new View.OnClickListener() { 52 @Override 53 public void onClick(View v) { 54 BackClickEvent(); 55 } 56 }); 57 } 58 59 Button buttonWrite = findViewById(R.id.button_write); 60 buttonWrite.setOnClickListener(new View.OnClickListener() { 61 @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD) 62 @Override 63 public void onClick(View v) { 64 AlertDialog confirmDialog = new AlertDialog.Builder(PrefActivity.this) 65 .setTitle(getString(R.string.mac_register)) 66 .setCancelable(false) 67 .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { 68 @Override 69 public void onClick(DialogInterface dialogInterface, int i) { 70 71 // エディットテキストのテキストを取得 72 String text = editText.getText().toString(); 73 textWrite.setText(text); 74 75 // 入力文字列を"input"に書き込む 76 SharedPreferences.Editor editor = dataStore.edit(); 77 editor.putString("input", text); 78 79 // editor.commit(); 80 editor.apply(); 81 Toast.makeText(getApplicationContext(), "完了", Gravity.CENTER).show(); 82 } 83 }) 84 .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { 85 @Override 86 public void onClick(DialogInterface dialogInterface, int i) { 87 88 } 89 }) 90 .create(); 91 confirmDialog.show(); 92 } 93 }); 94 95 Button buttonRead = findViewById(R.id.button_read); 96 buttonRead.setOnClickListener(new View.OnClickListener() { 97 @Override 98 public void onClick(View v) { 99 // "input"から読み出す、何もないときは"Nothing"を返す 100 String data = dataStore.getString("input", "Nothing"); 101 if (!Objects.requireNonNull(data).equals("Nothing")) { 102 textRead.setText(data); 103 } 104 } 105 }); 106 } 107 108 // アルファベットフィルタ a-z→A-z 109 private InputFilter alphabetFilter = new InputFilter() { 110 @Override 111 public CharSequence filter(CharSequence source, int start, int end, 112 Spanned dest, int dstart, int dend) { 113 if (source.toString().matches("^[a-zA-Z 0-9 :]+$")) { 114 return source.toString().toUpperCase(Locale.ROOT); 115 } else { 116 return ""; 117 } 118 } 119 }; 120 121 private void BackClickEvent() { 122 Intent intent = new Intent(getApplication(), ConfigActivity.class); 123 startActivity(intent); 124 } 125}

試したこと

String.formatを用いてtextの内容を加工出来ないかと考えましたができませんでした。

// エディットテキストのテキストを取得 String text = editText.getText().toString(); // 入力文字列に2文字区切りで:を挿入 String str = String.format("%:2d", text); System.out.println(str); textWrite.setText(str); // 入力文字列を"input"に書き込む SharedPreferences.Editor editor = dataStore.edit(); editor.putString("input", str); // editor.commit(); editor.apply(); Toast.makeText(getApplicationContext(), "完了", Gravity.CENTER).show(); }

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

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

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

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

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

cateye

2020/09/03 09:21

String.format("%:2d", text);の書式って、あってますか?
arumazirou

2020/09/03 10:09

合ってませんでした。 そもそも:は使えなかったので使い方を勘違いしていたようです。
guest

回答1

0

自己解決

「エディットテキストのテキストを取得」からのコードを以下のように変更したら出来ました。

// エディットテキストのテキストを取得 String text = editText.getText().toString(); StringBuilder sb = new StringBuilder(); sb.append(text); try { sb.insert(2, ":"); sb.insert(5, ":"); sb.insert(8, ":"); sb.insert(11, ":"); sb.insert(14, ":"); } catch (StringIndexOutOfBoundsException e) { Toast ts = Toast.makeText(getApplicationContext(), getString(R.string.not_entered), Toast.LENGTH_LONG); ts.setGravity(Gravity.CENTER, 0, 0); ts.show(); } textWrite.setText(text); // preferenceに書き込む if (text.trim() != null && !text.trim().equals("") && text.length() == 12) { SharedPreferences.Editor editor = dataStore.edit(); editor.putString("input", new String(sb)); editor.apply(); Toast.makeText(getApplicationContext(), getString(R.string.complete_regist), Gravity.CENTER).show(); } } })

投稿2020/10/01 02:13

arumazirou

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問