Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用编辑模式编辑文本_Android_Android Edittext - Fatal编程技术网

Android 使用编辑模式编辑文本

Android 使用编辑模式编辑文本,android,android-edittext,Android,Android Edittext,我需要一个可编辑的文本区域,其功能非常类似于Android上Google Drive应用程序中的文本区域。有人知道谷歌硬盘文本区在做什么吗 特点: 视图模式,不显示键盘,但显示光标 移动光标时,光标将显示编辑操作 编辑模式也可以由ActionBar中的编辑操作触发 编辑模式会显示类似“完成/放弃”模式的内容,其中包含一系列格式化操作 按“完成”退出编辑模式 我目前正在研究类似的东西 为编辑选项定义xml布局,即完成、撤消、重做、缩进和格式化。然后使用片段类膨胀此视图。我实现了一个内部接口,允许

我需要一个可编辑的文本区域,其功能非常类似于Android上Google Drive应用程序中的文本区域。有人知道谷歌硬盘文本区在做什么吗

特点:

  • 视图模式,不显示键盘,但显示光标
  • 移动光标时,光标将显示编辑操作
  • 编辑模式也可以由ActionBar中的编辑操作触发
  • 编辑模式会显示类似“完成/放弃”模式的内容,其中包含一系列格式化操作
  • 按“完成”退出编辑模式

我目前正在研究类似的东西

为编辑选项定义xml布局,即完成、撤消、重做、缩进和格式化。然后使用片段类膨胀此视图。我实现了一个内部接口,允许我的主要活动监听片段中的点击事件

package com.aesop.systems.top_bar;

import com.aesop.systems.cerulean.R;
import com.aesop.systems.utils.Frag;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ImageView;

public class TopBarEditor extends Frag implements OnClickListener {

private LinearLayout save;
private ImageView undo, redo, indent, outdent, code_in;

private EditorTopBarListener listen;

@Override
public View onCreateView(LayoutInflater inf, ViewGroup con, Bundle bundy) {
    root = inf.inflate(R.layout.top_bar_editor, con, false);
    loadContent();
    return root;
}

@Override
public void loadContent() {
    save = (LinearLayout) findViewById(R.id.save);
    save.setOnClickListener(this);

    undo = (ImageView) findViewById(R.id.undo);
    undo.setOnClickListener(this);
    redo = (ImageView) findViewById(R.id.redo);
    redo.setOnClickListener(this);
    indent = (ImageView) findViewById(R.id.indent);
    indent.setOnClickListener(this);
    outdent = (ImageView) findViewById(R.id.outdent);
    outdent.setOnClickListener(this);
    code_in = (ImageView) findViewById(R.id.code_in);
    code_in.setOnClickListener(this);
}

@Override
public void onClick(View cl) {
    if(listen != null)
    {
        if(save == cl)
        {
            listen.onSave();
        }
        else if(undo == cl)
        {
            listen.onUndo();
        }
        else if(redo == cl)
        {
            listen.onRedo();
        }
        else if(outdent == cl)
        {
            listen.onOutdent();
        }
        else if(indent == cl)
        {
            listen.onIndent();
        }
        else if(code_in == cl)
        {
            listen.onCodeIn();
        }
    }
}

public interface EditorTopBarListener
{
    public void onSave();
    public void onUndo();
    public void onRedo();
    public void onIndent();
    public void onOutdent();
    public void onCodeIn();
}

public void addEditorTopBarListener(EditorTopBarListener list) { listen = list; }
}

上述类别由Frag扩展而来;我创建了一个类来模拟普通的自定义视图。其代码如下所示。视图根目录是方便查找视图所必需的,并且受到保护,以便扩展类仍然可以引用它。因此,当碎片膨胀时,有必要对其进行定义。i、 e root=inf.flate(R.layout.top\u bar\u编辑器,con,false)

在主活动中,向编辑文本添加OnFocusChangedListener

editText1.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus) toggleEditorBar();
            else toggleDefaultBar();
        }
    });
然后,通过切换特定于编辑器的片段,在EditText焦点更改为编辑模式时处理这些操作。如果失去焦点,则返回默认栏。在我的例子中,片段的“holder”是一个带有id R.id.topbar的线性布局。要切换,请使用方便的方法,如

public void toggleDefaultBar()
{
    getFragmentManager().beginTransaction().replace(R.id.top_bar, default_bar).commit();
}

public void toggleEditorBar()
{
    getFragmentManager().beginTransaction().replace(R.id.top_bar, editor_bar).commit();
}
切换和onFocusChangedListener应该在您的主活动中实现,如果您选择创建自定义接口,还应该实现自定义接口。如果没有,那么在从片段返回根视图时,必须手动为主活动类中的每个对象添加onClickListeners。一个我还没有尝试过的小例子可以这样做

   TopBarEditor edit = new TopBarEditor(Activity.this);

   ImageView undo = (ImageView) edit.findViewById(R.id.undo);
   undo.setOnClickListener(this);   // if the activity implements a listener
这样做会进一步导致可读性问题,而且更容易,我发现可以实现一个自定义接口,这样您就可以明确地知道从实现的接口方法中调用了什么

希望我能帮上忙,我很抱歉这么长的时间,但这不是一个很快就能实现的过程,我认为对这类问题来说,更多更好

-克里斯

   TopBarEditor edit = new TopBarEditor(Activity.this);

   ImageView undo = (ImageView) edit.findViewById(R.id.undo);
   undo.setOnClickListener(this);   // if the activity implements a listener