我的应用中有几个按钮,上面有单个字符编号(例如' 1',' 2',' 3',... )。实际上,当用户点击按钮时,该按钮上的文字会从数字变为字母(例如' A',' B'或' C&#39 ; ...)并且如果用户再次单击它将更改回来。这一切都运作良好,因为字符和数字基本上是硬编程到应用程序,但我想让用户输入' custom'通过长按单击显示在按钮上的字符。例如,代替第一个按钮仅显示' 1'或者' A'我希望用户能够长按按钮并选择说' X'从键盘然后按钮显示此值。
我已经做了很多关于如何执行此操作的搜索,但我遇到的所有示例都是指为EditText而不是Button(或TextView)读取输入。我试图使用" InputMethodManager"正如Developer Docs(以及许多其他地方)所讨论的那样,但我并不真正理解它应该如何使用,只需将示例代码复制到我的onLongClick(...)& #39;方法不起作用,无论如何也可能不是正确的方法。
我能找到的最有前途的导演可能是Possbile to long press button and change its text in Android,其中包含评论:
您无法将光标放在按钮上。您可以在按钮后面放置一个edittext,当长按该按钮时,您可以使按钮不可见,然后聚焦Edittext。在edittext的onFocusChanged()中的edittext中输入文本后,再次出现按钮,然后将文本从edittext设置为按钮
虽然这个细节在细节上有点短暂,但这听起来很有希望。
因为我已经扩展了常规Button类来处理我的要求所以我可以在我的' CustomButton'中添加一个虚拟的EditText。如果能让我通过。
如果这里的任何值都是我用虚拟EditText捕获键盘输入的微弱尝试:
private class MyLongClickListener implements View.OnLongClickListener {
@Override
public boolean onLongClick(final View view) {
final CustomButton button = (CustomButton) view;
EditText editText = button.getEditText();
if (editText.requestFocus()) {
InputMethodManager imm = (InputMethodManager)
getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
return true;
}
}
但是执行只是在showSoftInput
中直接击中而退出方法而没有显示任何内容,当然也没有机会输入一个角色。
实现这一目标的最佳方式是什么?
答案 0 :(得分:1)
我会这样做。
创建包含Button
和EditText
的自定义视图。
public class MyView extends RelativeLayout {
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
addViews();
}
public MyView(Context context) {
super(context);
addViews();
}
private void addViews() {
View view = inflate(getContext(), R.layout.my_layout, null);
addView(view);
}
}
my_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText"
android:layout_gravity="center_horizontal"
android:visibility="gone"
android:singleLine="true"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Some Text"
android:id="@+id/textView"
android:layout_gravity="center_horizontal"
android:textAlignment="center"
android:textStyle="bold"
android:textSize="30sp" />
</RelativeLayout>
并像这样更改onLongClickListener
private class MyLongClickListener implements View.OnLongClickListener {
EditText editText;
TextView textView ;
@Override
public boolean onLongClick(View view) {
editText =(EditText) view.findViewById(R.id.editText);
textView =(TextView) view.findViewById(R.id.textView);
editText.bringToFront();
textView.setVisibility(View.INVISIBLE);
editText.setVisibility(View.VISIBLE);
if (editText.requestFocus()) {
InputMethodManager imm = (InputMethodManager)
getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
textView.setText(editText.getText().toString());
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId== EditorInfo.IME_ACTION_DONE){
editText.setVisibility(View.INVISIBLE);
textView.bringToFront();
textView.setVisibility(View.VISIBLE);
textView.setText(editText.getText().toString());
}
return false;
}
});
return true;
}
}
希望这有帮助。