简体   繁体   English

键入前后如何在EditText中更改文本

[英]How to change text in an EditText before and after typing

I have an EditText that by default has this string in it "[ ]". 我有一个EditText,默认情况下该字符串中包含“ []”。 What I want is that when the user selects the EditText the brackets and space all disappear. 我想要的是,当用户选择EditText时,方括号和空格全部消失。 Then after they are done editing I would like to place the brackets around their edit. 然后,在完成编辑后,我想将括号放在其编辑周围。

So, for example, if they typed "123" then when they are done typing the EditText will show "[123]". 因此,例如,如果他们键入“ 123”,则在完成键入后,EditText将显示“ [123]”。

I tried following the answer here, EditText not updated after text changed in the TextWatcher , by doing setText on the EditText from the afterTextChanged, but that throws an error. 我尝试按照这里的答案进行操作, 在TextWatcher中更改文本后 ,通过从afterTextChanged对EditText进行setText来使EditText不更新 ,但这会引发错误。

Thanks for any help. 谢谢你的帮助。

Here's my code: I just added the xml that creates the first line of the program since that's the line I'm having problems with. 这是我的代码:我刚刚添加了xml,它创建了程序的第一行,因为那是我遇到的问题。

activity_main.xml activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- Top Information -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".70"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <EditText
                    android:id="@+id/main_character_name_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".25"
                    android:hint="@string/main_character_name_edit_hint" />

                <EditText
                    android:id="@+id/main_player_name_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".25"
                    android:hint="@string/main_player_name_edit_hint" />

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".05"
                    android:gravity="right"
                    android:paddingRight="7dp"
                    android:text="@string/main_tl_view" />

                <EditText
                    android:id="@+id/main_tl_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".10"
                    android:gravity="center_horizontal"
                    android:inputType="number" />

                <EditText
                    android:id="@+id/main_tl_cost_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".05"
                    android:gravity="center_horizontal"
                    android:inputType="numberSigned"
                    android:text="@string/cost_edit" />
            </LinearLayout>

            <EditText
                android:id="@+id/main_character_description_edit"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top|left"
                android:hint="@string/main_character_description_edit"
                android:lines="2"
                android:maxLines="10"
                android:minLines="2"
                android:scrollbars="vertical" />
        </LinearLayout>

        <!-- Points Box -->

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".30"
            android:background="@drawable/border"
            android:orientation="vertical"
            android:padding="10dp" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="@string/main_points_view" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".25"
                    android:text="@string/main_points_total_view" />

                <EditText
                    android:id="@+id/main_points_total_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".75"
                    android:gravity="center_horizontal"
                    android:inputType="number" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".25"
                    android:text="@string/main_points_unspent_view" />

                <EditText
                    android:id="@+id/main_points_unspent_edit"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".75"
                    android:gravity="center_horizontal"
                    android:inputType="number" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

MainActivity.java MainActivity.java

package com.gmail.james.grider.gurpscharactersheet;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;

public class MainActivity extends Activity {
    /* -- Top Info -- */
    private EditText mMainCharacterEdit, mMainPlayerEdit, mMainTlEdit,
            mMainTlCostEdit, mMainDescriptionEdit;

    /* -- Points Box -- */
    private EditText mMainPointsTotalEdit, mMainPointsUnspentEdit;

    /* -- Stats Derived Box -- */
    private EditText mMainFirstStatsDerivedHpTotalEdit,
            mMainFirstStatsDerivedHpCostEdit,
            mMainFirstStatsDerivedHpCurrentEdit,
            mMainFirstStatsDerivedFpTotalEdit,
            mMainFirstStatsDerivedFpCostEdit,
            mMainFirstStatsDerivedFpCurrentEdit,
            mMainFirstStatsDerivedWillEdit, mMainFirstStatsDerivedWillCostEdit,
            mMainFirstStatsDerivedPerEdit, mMainFirstStatsDerivedPerCostEdit;

    /* -- Stats Boxes -- */
    private EditText mMainSecondStStEdit, mMainSecondStCostEdit,
            mMainSecondStLastSkillEdit, mMainSecondStLastLvlEdit,
            mMainSecondStLastRelEdit, mMainSecondStLastCostEdit;
    private TableLayout mStatStSkillTable;
    private EditText mMainSecondDxDxEdit, mMainSecondDxCostEdit,
            mMainSecondDxLastSkillEdit, mMainSecondDxLastLvlEdit,
            mMainSecondDxLastRelEdit, mMainSecondDxLastCostEdit;
    private TableLayout mStatDxSkillTable;
    private EditText mMainSecondIqIqEdit, mMainSecondIqCostEdit,
            mMainSecondIqLastSkillEdit, mMainSecondIqLastLvlEdit,
            mMainSecondIqLastRelEdit, mMainSecondIqLastCostEdit;
    private TableLayout mStatIqSkillTable;
    private EditText mMainSecondHtHtEdit, mMainSecondHtCostEdit,
            mMainSecondHtLastSkillEdit, mMainSecondHtLastLvlEdit,
            mMainSecondHtLastRelEdit, mMainSecondHtLastCostEdit;
    private TableLayout mStatHtSkillTable;

    /* -- Secondary Stats Box -- */
    private EditText mMainThirdSecondaryLiftEdit, mMainThirdSecondarySpeedEdit,
            mMainThirdSecondarySpeedCostEdit, mMainThirdSecondaryBasicMoveEdit,
            mMainThirdSecondaryBasicMoveCostEdit, mMainThirdSecondaryMoveEdit;
    private Spinner mMainThirdSecondaryDamageThrustSpinner,
            mMainThirdSecondaryDamageSwingSpinner,
            mMainThirdSecondaryEncumbranceSpinner;

    /* -- Defense Box -- */
    private EditText mMainFourthDefenseDamageReductionEdit,
            mMainFourthDefenseDodgeEdit, mMainFourthDefenseParryEdit,
            mMainFourthDefenseBlockEdit;

    private void updateSkillRow(int stat, boolean action) {
        TableRow row;

        if (action) {
            switch (stat) {
            case Info.ST:
                row = (TableRow) mStatStSkillTable.getChildAt(mStatStSkillTable
                        .getChildCount() - 1);

                mMainSecondStLastSkillEdit = (EditText) row.getChildAt(0);
                mMainSecondStLastLvlEdit = (EditText) row.getChildAt(1);
                mMainSecondStLastRelEdit = (EditText) row.getChildAt(2);
                mMainSecondStLastCostEdit = (EditText) row.getChildAt(3);

                break;
            case Info.DX:
                break;
            case Info.IQ:
                break;
            case Info.HT:
            }
        }
    }

    private void addSkillRow(int stat) {
        int skillCount;
        LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
        TableRow row = (TableRow) inflater.inflate(
                R.layout.activity_main_skill_row, null);

        switch (stat) {
        case Info.ST:
            skillCount = mStatStSkillTable.getChildCount();
            if (skillCount > 0)
                mStatStSkillTable.addView(row, skillCount - 1);
            else
                mStatStSkillTable.addView(row);
            break;
        case Info.DX:
            skillCount = mStatDxSkillTable.getChildCount();
            if (skillCount > 0)
                mStatDxSkillTable.addView(row, skillCount - 1);
            else
                mStatDxSkillTable.addView(row);
            break;
        case Info.IQ:
            skillCount = mStatIqSkillTable.getChildCount();
            if (skillCount > 0)
                mStatIqSkillTable.addView(row, skillCount - 1);
            else
                mStatIqSkillTable.addView(row);
            break;
        case Info.HT:
            skillCount = mStatHtSkillTable.getChildCount();
            if (skillCount > 0)
                mStatHtSkillTable.addView(row, skillCount - 1);
            else
                mStatHtSkillTable.addView(row);
        }

        updateSkillRow(stat, Info.ADD);
    }

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

        mMainTlCostEdit = (EditText) findViewById(R.id.main_tl_cost_edit);
        mMainTlCostEdit.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable s) {
                String text = mMainTlCostEdit.getText().toString();
                text = "[" + text + "]";
                mMainTlCostEdit.setText(text);
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }
        });
        // mMainTlCostEdit.setOnClickListener(new View.OnClickListener() {
        //
        // @Override
        // public void onClick(View v) {
        // String text = mMainTlCostEdit.getText().toString();
        // text.replace("[", "");
        // text.replace("]", "");
        // mMainTlCostEdit.setText(text);
        // }
        // });

        mStatStSkillTable = (TableLayout) findViewById(R.id.main_second_st_skills_tablelayout);
        addSkillRow(Info.ST);
        mMainSecondStLastSkillEdit.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                String text = mMainSecondStLastSkillEdit.getText().toString();
                if (text == "") {

                } else {
                    addSkillRow(Info.ST);
                }
            }
        });

        mStatDxSkillTable = (TableLayout) findViewById(R.id.main_second_dx_skills_tablelayout);
        mStatIqSkillTable = (TableLayout) findViewById(R.id.main_second_iq_skills_tablelayout);
        mStatHtSkillTable = (TableLayout) findViewById(R.id.main_second_ht_skills_tablelayout);
        addSkillRow(Info.DX);
        addSkillRow(Info.IQ);
        addSkillRow(Info.HT);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.damage_table_array, R.layout.my_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mMainThirdSecondaryDamageThrustSpinner = (Spinner) findViewById(R.id.main_third_secondary_damage_thrust_spinner);
        mMainThirdSecondaryDamageThrustSpinner.setAdapter(adapter);
        mMainThirdSecondaryDamageThrustSpinner.setSelection(4);
        mMainThirdSecondaryDamageSwingSpinner = (Spinner) findViewById(R.id.main_third_secondary_damage_swing_spinner);
        mMainThirdSecondaryDamageSwingSpinner.setAdapter(adapter);
        mMainThirdSecondaryDamageSwingSpinner.setSelection(6);
        mMainThirdSecondaryEncumbranceSpinner = (Spinner) findViewById(R.id.main_third_secondary_enchumbrance_spinner);
        adapter = ArrayAdapter.createFromResource(this,
                R.array.encumbrance_level_array, R.layout.my_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mMainThirdSecondaryEncumbranceSpinner.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_item_extras:
            Intent extrasIntent = new Intent(MainActivity.this,
                    ExtraActivity.class);
            startActivity(extrasIntent);
            return true;
        case R.id.menu_item_equipment:
            Intent equipmentIntent = new Intent(MainActivity.this,
                    EquipmentActivity.class);
            startActivity(equipmentIntent);
            return true;
        case R.id.menu_item_items:
            Intent itemsIntent = new Intent(MainActivity.this,
                    ItemActivity.class);
            startActivity(itemsIntent);
            return true;
        case R.id.menu_item_options:
            Intent optionsIntent = new Intent(MainActivity.this,
                    OptionListActivity.class);
            startActivity(optionsIntent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

}

you can do somthing like: 你可以做这样的事情:

String temp = EditText.getText().toString();
temp="[temp]";
EditText="[]";

or do you want it to be showed inside the EditText? 还是要在EditText中显示它? you can use OnKeyListener and make the EditText look like you want after some key is pressed.. eg "ENTER" 您可以使用OnKeyListener并在按下某些键后使EditText看起来像您想要的。例如“ ENTER”

EditText=.setText("[temp]");

Use a View.OnFocusChangeListener on the EditText . EditText上使用View.OnFocusChangeListener It contains the onFocusChange method which is called when the focus state on the view is changed. 它包含onFocusChange方法,该方法在视图上的焦点状态更改时被调用。 For this case, you can set the braces surrounding the text once the EditText goes out of focus and add those back upon the EditText gaining focus. 对于这种情况,您可以在EditText失去焦点后设置括号,然后将其重新添加到EditText获得焦点。

mMainTlCostEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            String text = mMainTlCostEdit.getText().toString();
            mMainTlCostEdit.setText(text.substring(1, text.length() - 1));
        } else {
            mMainTlCostEdit.setText(String.format("[%s]", mMainTlCostEdit.getText().toString()));
        }
    }
});

For more reference, check out this documentation on the Android Developers page - https://developer.android.com/reference/android/view/View.OnFocusChangeListener.html 有关更多参考,请在Android开发人员页面上查看此文档-https: //developer.android.com/reference/android/view/View.OnFocusChangeListener.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM