我想要一个 TextView 显示文本,当您单击/长按它时,应该“显示”一个文本框并允许编辑所述文本。当你完成编辑时(我想是按键输入)它应该恢复到带有更新文本的 TextView ......
我想知道实现这样一个小部件是否可行,或者我应该破解一个解决方法吗?非常欢迎提示和建议。
如果您需要进一步了解我的意思,请转到您的示例。 (windows) skype 配置文件并亲自查看。
编辑: 澄清:我特别要求一个小部件或类似的 TextView ,直到单击,然后转换为包含相同文本的编辑文本;完成编辑后,它会转换回代表新更改文本的 TextView 。这就是我所说的“按需编辑文本小部件”的意思。
但我希望得到比
更好的东西public class Widget {
TextView text;
EditText edit;
String textToRepresent;
//...
}
最佳答案
这里有几个不同的选项。
首先,您必须向要进行交互的 TextView 注册一个 onClick 或 onLongClick。 只需确保用户知道它是可点击的
然后让您的 onClick 函数启动一个 DialogFragment .我喜欢创建展示功能。请注意,您可以使用此处的支持库使您的应用向后兼容。
private void showDialog() {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getSupportFragmentManager(), "dialog");
}
DialogFragment 非常简单。在您的 onCreateView 中,您将膨胀要显示给用户的 View 。您也可以用简单的 AlertDialogBuilder 包装它如果您不想定制。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.your_dialog_layout);
mTitleEditText = (TextView) view.findViewById(R.id.title);
mTitleEditText.setOnClickListener(this);
return view;
}
在您的 findViewByIds 之后设置您的 onClickListeners。 您必须注意的最后一件事是将数据返回到原始 TextView 中。 您可以通过在 Activity 中创建一个可以从 DialogFragment 内部调用的公共(public)方法来做到这一点。像这样
@Override
public void onClick(View v) {
int clickedId = v.getId();
if (clickedId == mDoneButton.getId()) {
MyActivity activity = (MyActivity)getActivity();
mTitle = mTitleEditText.getText().toString();
activity.setText(mTitle);
dismiss();
}
}
我建议使用 DialogFragment,因为它可以很好地处理您的生命周期。 但是,另一种选择是创建一个以对话为主题的新 Activity
<activity android:theme="@android:style/Theme.Dialog" />
然后你可以startActivityForResult显示您的对话框,然后在 onActivityResult 中捕获您的结果
关于java - EditText 按需小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11722340/