You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Android Button短按跳转Activity、长按通过用户输入重命名

实现方案

改动说明

  • 移除了冗余的单按钮专属回调方法,复用统一的事件处理逻辑
  • 长按按钮时弹出带输入框的系统对话框,获取用户输入的自定义名称
  • 新增SharedPreferences持久化存储,保证重启应用后修改的按钮名称不会重置

完整代码

import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    Button button;
    Button button1;
    Button button2;
    SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp = getSharedPreferences("button_names", MODE_PRIVATE);

        // 初始化第一个按钮
        button = findViewById(R.id.button3);
        button.setText(sp.getString("btn3_name", "默认名称1"));
        button.setOnClickListener(v -> startActivity(new Intent(this, firmaeins.class)));
        button.setOnLongClickListener(v -> showRenameDialog((Button) v, "btn3_name"));

        // 初始化第二个按钮
        button1 = findViewById(R.id.button55);
        button1.setText(sp.getString("btn55_name", "默认名称2"));
        button1.setOnClickListener(v -> startActivity(new Intent(this, firmaZwei.class)));
        button1.setOnLongClickListener(v -> showRenameDialog((Button) v, "btn55_name"));

        // 初始化第三个按钮
        button2 = findViewById(R.id.button40);
        button2.setText(sp.getString("btn40_name", "默认名称3"));
        button2.setOnClickListener(v -> startActivity(new Intent(this, firmaDrei.class)));
        button2.setOnLongClickListener(v -> showRenameDialog((Button) v, "btn40_name"));
    }

    /**
     * 通用重命名弹窗方法
     * @param targetBtn 要重命名的按钮对象
     * @param spKey 存储按钮名称对应的SharedPreferences键
     */
    private boolean showRenameDialog(Button targetBtn, String spKey) {
        final EditText input = new EditText(this);
        input.setText(targetBtn.getText());
        input.setSelection(input.getText().length());

        new AlertDialog.Builder(this)
                .setTitle("请输入按钮新名称")
                .setView(input)
                .setPositiveButton("确定", (dialog, which) -> {
                    String newName = input.getText().toString().trim();
                    if (!newName.isEmpty()) {
                        // 更新按钮文本
                        targetBtn.setText(newName);
                        // 存储到本地
                        sp.edit().putString(spKey, newName).apply();
                    }
                })
                .setNegativeButton("取消", null)
                .show();
        return true;
    }
}

可选简化说明

如果不需要持久化存储按钮名称,只需要临时修改本次启动的按钮文本,可以直接删除SharedPreferences相关的所有逻辑,showRenameDialog方法里只保留修改按钮文本的逻辑即可。

内容的提问来源于stack exchange,提问作者DrlSoldberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:02