在android中将文本视图中的文本编辑为编辑文本
我不知道我的EditText到底发生了什么 我有一个文本视图,一个编辑文本和一个按钮 所需的逻辑是: 单击按钮时,使用文本视图的内容设置编辑文本。 单击“完成”后,文本视图将显示编辑文本的内容 这是我目前的代码:在android中将文本视图中的文本编辑为编辑文本,android,Android,我不知道我的EditText到底发生了什么 我有一个文本视图,一个编辑文本和一个按钮 所需的逻辑是: 单击按钮时,使用文本视图的内容设置编辑文本。 单击“完成”后,文本视图将显示编辑文本的内容 这是我目前的代码: speech_text = (TextView) findViewById(R.id.speech); speech_text_edit = (EditText) findViewById(R.id.speech_edit); editB
speech_text = (TextView) findViewById(R.id.speech);
speech_text_edit = (EditText) findViewById(R.id.speech_edit);
editBTN= (Button) findViewById(R.id.edit);
editBTN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speech_text_edit.setText(speech_text.getText().toString());
speech_text.setVisibility(View.GONE);
speech_text_edit.setVisibility(View.VISIBLE);
//open keyboard
InputMethodManager show_imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
show_imm.showSoftInput(editBTN, InputMethodManager.SHOW_IMPLICIT);
speech_text_edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
speech_text.setText(speech_text_edit.getText().toString());
speech_text_edit.setVisibility(View.GONE);
speech_text.setVisibility(View.VISIBLE);
speech_text_edit.setFocusable(false);
//close keyboard
InputMethodManager hide_imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
hide_imm.hideSoftInputFromWindow(editBTN.getWindowToken(), 0);
}
return true;
}
});
}
});
布局代码:
<TextView
android:id="@+id/speech"
android:layout_width="match_parent"
android:layout_height="350dp"
android:layout_margin="25dp" android:layout_marginBottom="150dp"
android:textSize="25sp" android:textAlignment="inherit"
android:background="@drawable/curved_background"
android:textIsSelectable="true"
android:padding="10dp" android:visibility="visible"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="350dp"
android:id="@+id/speech_edit"
android:background="@drawable/curved_background"
android:imeActionLabel="actionDone"
android:visibility="gone"
android:textSize="25sp"
android:layout_margin="25dp" android:layout_marginBottom="150dp"
android:inputType="textAutoCorrect"
android:layout_gravity="top"
android:focusable="true"/>
TL;博士
在显示键盘之前
InputMethodManager#showSoftInput( FOCUSED_VIEW, 0 );
除去
TextView.setFocusable(false);
聚焦的视图
应该是您的speed\u edit\u文本
!不是按钮
还要确保设置了EditText
的以下属性以启用多行输入:
android:inputType="textAutoCorrect|textMultiLine"
android:layout_gravity="top"
android:lines="8"
android:gravity="top|start"
android:minLines="6"
android:maxLines="10"
android:scrollbars="vertical"
“最小”、“最大”和“线”值是任意数,但可以使用该值设置长方体高度的域
关于焦点
问题是您对TextView#setFocusable(false)
的调用。当您将其设置为false时,您也会对该元素失去焦点。所以现在当你再次显示它时,Android不知道为什么要显示键盘(因为显示时,EditText
没有自动聚焦)。因为你隐藏了视图,你真的不需要让它不可聚焦,它已经消失了,所以不能聚焦
- 当您要显示键盘时,为要编辑的视图请求焦点(
)view#requestFocus
- 显示聚焦视图的键盘
- 完成后,隐藏键盘
- 清除焦点或隐藏具有焦点的元素(这就是您要做的)(
)查看#clearFocus
- 0:这是an
EditText
- 1(
):这不是用户直接请求的SHOW\u IMPLICIT
- 2(
):强制显示,直到用户“强制”关闭SHOW\u FORCED
- 0:这是an
EditText
- 1:(
):如果使用HIDE\u IMPLICIT
SHOW\u IMPLICIT
- 2:(
):隐藏它,除非它是用HIDE\u不总是
SHOW\u强制显示的
然而,你可以强迫你想要的一切。如果某个元素不可聚焦,则无法通过显示键盘获得自动聚焦。我不想限制行号。我想把文本从编辑文本的开头开始,我没听清你的问题。您有1个Textview、EditText和Button,然后单击按钮将Textview的文本设置为EditText,然后再次单击按钮将EditText的文本设置为Textview。这是对的吗?半是/否。我的意思是“第二次点击”是再次重复策略-从文本视图传递文本以再次编辑文本。但没有软键盘和指针。因为TextView用于显示文本。若你们点击编辑文本,你们会得到键盘。我还是不明白你想说什么。好吧,我再解释一遍。电视上写着“你好”。单击editBTN。E.T.用键盘和指针显示“你好”。我把它编辑成“你好,世界”。点击完成BTN,电视显示“Hello world”。没关系。现在,我再次单击editBTN。E.T.也会显示“Hello world”,但软键盘和指针不会显示/开始。您的logcat没有错误,所以我不确定您想显示什么好,我再次解释。电视上写着“你好”。单击editBTN。E.T.用键盘和指针显示“你好”。我把它编辑成“你好,世界”。点击完成BTN,电视显示“Hello world”。没关系。现在,我再次单击editBTN。E.T.也会显示“Hello world”,但软键盘和指针不会显示/开始。
setFocusable(false)
会阻止您再次输入编辑文本。很好!谢谢。但当我使用textMultiLine
Done键时,它就消失了!你建议我使用动作模式来完成任务还是做其他事情。(将文本从编辑文本传递到文本视图)是。如果使用IME操作,则“完成”不会被替换,而是隐藏在长按“回车”键时。我建议您不要隐藏编辑按钮,而是将编辑按钮更改为“完成”按钮。基本上:如果编辑:编辑按钮完成。如果不编辑:编辑按钮是转到edit.Ya。我更喜欢有“回车”键。我会把它放在我的键盘上。。。但是完成编辑过程怎么样?一定有什么东西可以隐藏软键板。我该怎么做,请给我你的建议?是的,我会有一个额外的按钮,你可以点击来完成(保存,完成,无论什么),带有一个隐藏键盘的OnClickListener
,或者改变编辑按钮的图形,改变你点击它时的行为。第一件事对你来说可能更容易。
InputMethodManager#showSoftInput( FOCUSED_VIEW, 0 );
TextView.setFocusable(false);
android:inputType="textAutoCorrect|textMultiLine"
android:layout_gravity="top"
android:lines="8"
android:gravity="top|start"
android:minLines="6"
android:maxLines="10"
android:scrollbars="vertical"