我需要一个可编辑的文本区域,其功能与Android上Google Drive应用中的文本区域非常相似。有谁知道如何操作Google云端硬盘文字区域?
特点:
答案 0 :(得分:0)
我正在研究目前与此类似的东西。
为编辑选项定义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扩展;我用来模仿普通自定义视图的类。它的代码如下。需要查看根才能轻松查找视图并受到保护,以便扩展类仍可以引用它。因此,必须在片段膨胀时定义它。即root = inf.inflate(R.layout.top_bar_editor,con,false);
public abstract class Frag extends Fragment {
protected View root;
public View findViewById(int id)
{
return root.findViewById(id);
}
public abstract void loadContent();
}
在您的主要活动中,将OnFocusChangedListener添加到EditText。
editText1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) toggleEditorBar();
else toggleDefaultBar();
}
});
然后通过切换编辑器特定片段,在EditText焦点更改为编辑模式时处理操作。如果失去焦点则返回默认栏。在我的实例中,片段的'holder'是一个具有id R.id.topbar的LinearLayout。要切换使用便利方法,例如。
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应该在您的主活动中实现,如果您选择创建一个,也应该实现自定义界面。如果不这样做,那么在从片段返回根视图时,必须为主Activity类中的每一个手动添加onClickListeners。我还没有尝试过的一个小例子可以像。 。
TopBarEditor edit = new TopBarEditor(Activity.this);
ImageView undo = (ImageView) edit.findViewById(R.id.undo);
undo.setOnClickListener(this); // if the activity implements a listener
这样做会导致可读性问题进一步发生,而且它更容易,我发现实现了一个自定义接口,以便您明确知道从实现的接口方法调用的是什么。
希望我帮助并为此道歉,但这不是一个快速实施的过程,我认为对于这类问题更有利。
-Chris