我如何通过用户输入更改文本按钮

问题描述 投票:-1回答:1

在我的练习中,有一个3x3的按钮网格,有些带有数字,而有些没有,我应该将那些没有数字的按钮放在0到9之间,但是由用户放置,然后更改按钮的文本。我能怎么做?我尝试了一些方法,但是即使在互联网上搜索也无法正常工作,但并没有达到我想要的结果。

这是代码

public class MainActivity extends AppCompatActivity {



private Button btn;
private EditText edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button_X00);
    edit = (EditText) findViewById(R.id.edit_dialog);

    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.activity_main, 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();
}
   }

这是XML代码

  <LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text_view_p8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="GRIGLIAMOD10"
        android:textSize="30sp" />


</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="418dp"
    android:layout_height="586dp"
    android:layout_marginTop="49dp"
    android:orientation="vertical"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/linearLayout2">

    <androidx.gridlayout.widget.GridLayout
        android:id="@+id/tabellaX"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="60dp">

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

        <Button
            android:id="@+id/button_X22"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="0"
            android:focusable="false"/>

        <Button
            android:id="@+id/button_X01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="" />

        <Button
            android:id="@+id/button_X12"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="0" />

        <Button
            android:id="@+id/button_X20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X21"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="" />

        <Button
            android:id="@+id/button_X10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="1"
            app:layout_row="1" />
    </androidx.gridlayout.widget.GridLayout>
</LinearLayout>
java android
1个回答
1
投票

所以这是一种可能的解决方案。首先,在XML中,您可以避免同时使用线性布局,因为您使用的是约束布局。因此,XML如下所示。

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view_p8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="GRIGLIAMOD10"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.gridlayout.widget.GridLayout
        android:id="@+id/tabellaX"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="60dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_view_p8">

        <Button
            android:id="@+id/button_X00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""            
            app:layout_column="0"
            app:layout_row="0" />

        <Button
            android:id="@+id/button_X01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            />

        <Button
            android:id="@+id/button_X12"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""            
            app:layout_column="2"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""            
            app:layout_column="2"
            app:layout_row="0" />

        <Button
            android:id="@+id/button_X20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X21"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            />

        <Button
            android:id="@+id/button_X22"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""

            app:layout_column="0"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""

            app:layout_column="1"
            app:layout_row="1" />
    </androidx.gridlayout.widget.GridLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

我还更改了Java文件,并留下了一些评论,以防您想要与应用程序不同的行为。

import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.ArrayList;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.gridlayout.widget.GridLayout;

public class MainActivity extends AppCompatActivity implements View.OnLongClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get all the buttons from the grid - be careful if you add another type of Touchable
        ArrayList<View> gridButtons = ((GridLayout) findViewById(R.id.tabellaX)).getTouchables();

        for (View v : gridButtons) {
            ((Button) v).setOnLongClickListener(this);
        }
    }

    @Override
    public boolean onLongClick(View v) {
        // show the dialog ONLY if the button isn't set
        if (((Button) v).getText().toString().isEmpty())
            showDialog(v);

        return true;
    }

    private void showDialog(final View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Input a number");

        final EditText input = new EditText(this);
        input.setInputType(InputType.TYPE_CLASS_NUMBER);
        builder.setView(input);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // get only the first inserted number(i.e. input: 45; take only the 4)
                ((Button) v).setText(input.getText().toString().substring(0, 1));
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }


}

编辑

在答案下面的评论部分,您问我是否可以编辑该应用程序的行为。

如果单击第一个有数字的按钮,例如“ 4”,则必须将其添加到所有其他具有数字的按钮中;如果第二个按钮具有数字3,则该数字将变为7。但是如果例如,将5到6相加,则它不能成为11,而1必须是模块10。

package hr.hello.dm.test;

import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.ArrayList;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.gridlayout.widget.GridLayout;

public class MainActivity extends AppCompatActivity implements View.OnLongClickListener, View.OnClickListener {

    private ArrayList<View> gridButtons;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // get all the buttons from the grid - be careful if you add another type of Touchable
        gridButtons = ((GridLayout) findViewById(R.id.tabellaX)).getTouchables();

        for (View v : gridButtons) {
            ((Button) v).setOnLongClickListener(this);
            ((Button) v).setOnClickListener(this);
        }
    }

    @Override
    public void onClick(View v) {
        int value = Integer.parseInt(((Button) v).getText().toString());
        for (View btn : gridButtons) {
            if(v.getId() != btn.getId() && !((Button) btn).getText().toString().isEmpty()) {
                int btnValue = Integer.parseInt(((Button) btn).getText().toString());
                ((Button) btn).setText(String.valueOf((value + btnValue)%10));
            }
        }

    }

    @Override
    public boolean onLongClick(View v) {

        if (((Button) v).getText().toString().isEmpty())
            showDialog(v);

        return true;
    }

    private void showDialog(final View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Input a number");

        final EditText input = new EditText(this);
        input.setInputType(InputType.TYPE_CLASS_NUMBER);
        builder.setView(input);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                    int value = Integer.parseInt(input.getText().toString());
                    ((Button) v).setText(String.valueOf(value));

            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }

}

0
投票

据我所知,您正在尝试做什么,下面的代码可能会对您有所帮助。

public class MainActivity extends AppCompatActivity{


Button[] buttons;

private final String TAG = this.getClass().getSimpleName();


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttons = new Button[9];

    buttons[0] = (Button) findViewById(R.id.button_X00);
    buttons[1] = (Button) findViewById(R.id.button_X10);
    buttons[2] = (Button) findViewById(R.id.button_X20);
    buttons[3] = (Button) findViewById(R.id.button_X01);
    buttons[4] = (Button) findViewById(R.id.button_X11);
    buttons[5] = (Button) findViewById(R.id.button_X21);
    buttons[6] = (Button) findViewById(R.id.button_X02);
    buttons[7] = (Button) findViewById(R.id.button_X12);
    buttons[8] = (Button) findViewById(R.id.button_X22);

    for (int a = 0; a<buttons.length;a++){
        showDialog(buttons[a]);
    }
}

private void showDialog(final Button btn) {

    btn.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("input text");

            View view = View.inflate(MainActivity.this,R.layout.dialog_activity, null);
            builder.setView(view);

            final EditText edit_dialog = view.findViewById(R.id.edit_dialog);

            builder.setNegativeButton("cancel",null);
            builder.setPositiveButton("confirm", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        btn.setText(edit_dialog.getText().toString());
                    }catch (Exception e){
                        Log.e(TAG, e.getMessage() + "  " );
                    }
                }
            });

            AlertDialog alertDialog = builder.create();
            alertDialog.show();

            return true;
        }
    });

}
}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<androidx.gridlayout.widget.GridLayout
    android:id="@+id/tabellaX"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="60dp">

    <Button
        android:id="@+id/button_X22"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="2"
        app:layout_row="2" />

    <Button
        android:id="@+id/button_X00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="0"
        app:layout_row="0"
        android:focusable="false"/>

    <Button
        android:id="@+id/button_X01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true" />

    <Button
        android:id="@+id/button_X12"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="2"
        app:layout_row="1" />

    <Button
        android:id="@+id/button_X02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="2"
        app:layout_row="0" />

    <Button
        android:id="@+id/button_X20"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="0"
        app:layout_row="2" />

    <Button
        android:id="@+id/button_X21"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="1"
        app:layout_row="2"/>

    <Button
        android:id="@+id/button_X10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="0"
        app:layout_row="1" />

    <Button
        android:id="@+id/button_X11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        app:layout_column="1"
        app:layout_row="1" />
</androidx.gridlayout.widget.GridLayout>

</LinearLayout>

这里是dialog_activity.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="match_parent">

<TextView
    android:id="@+id/text_view_p8"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:gravity="center"
    android:text="GRIGLIAMOD10"
    android:textSize="30sp" />

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

</LinearLayout>
© www.soinside.com 2019 - 2024. All rights reserved.