【问题标题】:Allow User to edit button text on long click in Android允许用户在 Android 中长按时编辑按钮文本
【发布时间】:2016-11-13 03:23:33
【问题描述】:

我想允许应用用户更改 Android 中的按钮文本。当用户单击按钮时,它应该做一些事情,但是当他/她长按按钮时,应该会弹出一个编辑文本,并且任何用户输入的内容都应该保存为按钮文本。 到目前为止,我已经完成了以下事情。

btn1 = (Button) findViewById(R.id.button1);
etLabel = (EditText) findViewById(R.id.etName);

btn1.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                // How to pop-up edittext from here 
                // to allow user change Button name
                btn1.setText(name);
                return true;
            }
        });
    }

    public void onButtonClick(View view) {
        switch (view.getId()) {
            case R.id.button1:
                // do something else here
                break;
    }
 }

【问题讨论】:

  • 谷歌它你会找到你的答案,请在发布你的问题之前先尝试研究。您会发现有几篇帖子回答了您的问题。
  • 您遇到了什么问题?

标签: android button android-edittext onlongclicklistener


【解决方案1】:

试试这样:

public class SOdemoAcitvity extends AppCompatActivity {

private Button btn;
private EditText edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.so_demo);
    btn = (Button) findViewById(R.id.btn_demo);
    edit = (EditText) findViewById(R.id.edit_text);

    btn.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            showDialog(edit.getText().toString());

            return true;
        }


    });
}

private void showDialog(String str) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("input text");
    View view = LayoutInflater.from(this).inflate(R.layout.dialog_view, null);
    final EditText edit_dialog = (EditText) view.findViewById(R.id.edit_dialog);
    edit_dialog.setText(str);
    builder.setView(view);
    builder.setNegativeButton("cancel",null);
    builder.setPositiveButton("confirm", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
                    btn.setText(edit_dialog.getText().toString());
        }
    });
    builder.show();
}
}

dialog_view xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/edit_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

然后

【讨论】:

  • 嗨 Cgx。尝试了您的解决方案,但在 longClick 上没有任何反应
  • 还有一件事。当我保存文本时,它是一个临时更改。我想永久保存它,直到我通过 LongClick 再次更改它。如何做到这一点?
【解决方案2】:

您可以create a input dialog从用户那里获取文本

btn1.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                builder.show();
                return true;
            }
        });
    }

并设置 btn1 的文本如下:

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override
    public void onClick(DialogInterface dialog, int which) {
       btn1.setText(input.getText().toString());
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2013-03-02
    • 2019-01-08
    • 2017-08-23
    相关资源
    最近更新 更多