TextView具备长按编辑功能,返回键可保存当前编辑内容

来源:互联网 发布:淘宝潮牌 编辑:程序博客网 时间:2024/05/29 11:31

这个需求看起来很简单,但是可能会有一些细节上的处理,所以拿出来跟大家一起分享下,其实标题上说的TextView不是真正意义上的TextView,我是采用EditText实现,EditText继承自TextView,基本上TextView能使用的方法EditText都能使用,但是EditText有更为方便的方法,大家用TextView完全也可以实现该需求,只是我在写项目是用到的是EditText怕大家会有所误解,在此提一下,下面看代码。

首先先是简单配置下xml文件

<EditText                    android:focusable="false"                    android:focusableInTouchMode="false"                    android:background="@null"                    android:text=""                    android:id="@+id/class_57"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:layout_alignParentTop="true"                    android:layout_marginLeft="5dip"                    android:layout_marginRight="5dip"                    android:layout_marginTop="10dip"                    android:layout_toRightOf="@+id/rikcb_3jie"                    android:singleLine="true"                    android:tag="rikcb_km"                    android:textColor="@color/BLACK_HALF"                    android:textSize="22sp" />

在java代码中做处理,让EditText实现onLongClickListener()

        class_57 = (EditText) findViewById(R.id.class_57);         class_57.setOnLongClickListener(this);       

通过SharedPreference设置该View区域的显示文字信息

        sp = getSharedPreferences("class_plan", Context.MODE_PRIVATE);           class_57.setText(sp.getString("class_57","默认显示的文字信息"));


然后在长按监听事件中做如下处理

/**     * EditText的长按事件监听     * @param v     * @return     */    @Override    public boolean onLongClick(View v) {        switch (v.getId()){            case R.id.**:                .....                break;            case  R.id.**:               ......                break;            case R.id.class_57 :                setItemText(class_57,"class_57");   //封装功能方法                break;                 }        return true;    }

    /**     * 设置edittext的点击监听事件,用户长按可修改edittext中的内容,     * 点击返回按键,存入sharedpreference中     *     * @param edittext  要修改的edittext     * @param keyValue  存入sharedpreference中的键值     */    private void setItemText(final EditText edittext, final String keyValue) {        edittext.setFocusableInTouchMode(true);        edittext.setFocusable(true);        Log.i("xieodng", "被长按");        edittext.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                if (edittext.isFocused()) {                    if (keyCode == KeyEvent.KEYCODE_BACK) {                        edittext.setFocusableInTouchMode(false);                        edittext.clearFocus();                        edittext.setTextColor(getResources().getColor(R.color.accent_material_dark));                        SharedPreferences.Editor editor = sp.edit();                        editor.putString(keyValue, edittext.getText().toString());                        editor.commit();                        return true;                    }                }                return false;            }        });        edittext.setText(sp.getString(keyValue, ""));    }



0 0
原创粉丝点击