如何在警报对话框中显示 phone 上的键盘?
How to show keyboard on phone in alert Dialog?
当我显示一个用户可以在 editText 中输入玩家数量的警告对话框时,我无法找到让 phone 的键盘弹出的方法。因此,当我 运行 物理 phone 上的应用程序时,我无法在 editText 中输入任何内容。这也是我的 Main 和对话框的代码 class:
主要:
package com.example.joppe.firstapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements
spelersDialog.spelersDialogListener {
private TextView textView_test;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView_test = (TextView) findViewById(R.id.textView_test);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openDialog();
}
});
}
public void openDialog() {
spelersDialog SpelersDialog = new spelersDialog();
SpelersDialog.show(getSupportFragmentManager(), "spelers Dialog");
}
@Override
public void applytexts(String number) {
textView_test.setText(number);
}
}
警报对话框:
package com.example.joppe.firstapp;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
public class spelersDialog extends AppCompatDialogFragment {
private EditText players;
private spelersDialogListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.layout_dialog, null);
builder.setView(view)
.setTitle("Number of players:")
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setPositiveButton("apply", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String number = players.getText().toString();
listener.applytexts(number);
}
});
players = (EditText) view.findViewById(R.id.players);
return builder.create();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (spelersDialogListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() +
"must implement spelersDialogListener");
}
}
public interface spelersDialogListener {
void applytexts(String number);
}
}
在对话框片段中
@Override
public void onResume() {
super.onResume();
//Show the keyboard
players.post(new Runnable()
{
@Override
public void run()
{
players.requestFocus();
InputMethodManager imm =
(InputMethodManager)etMeterValue.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null)
imm.showSoftInput(etMeterValue, InputMethodManager.SHOW_IMPLICIT);
}
});
}
当我显示一个用户可以在 editText 中输入玩家数量的警告对话框时,我无法找到让 phone 的键盘弹出的方法。因此,当我 运行 物理 phone 上的应用程序时,我无法在 editText 中输入任何内容。这也是我的 Main 和对话框的代码 class:
主要:
package com.example.joppe.firstapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements
spelersDialog.spelersDialogListener {
private TextView textView_test;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView_test = (TextView) findViewById(R.id.textView_test);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openDialog();
}
});
}
public void openDialog() {
spelersDialog SpelersDialog = new spelersDialog();
SpelersDialog.show(getSupportFragmentManager(), "spelers Dialog");
}
@Override
public void applytexts(String number) {
textView_test.setText(number);
}
}
警报对话框:
package com.example.joppe.firstapp;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
public class spelersDialog extends AppCompatDialogFragment {
private EditText players;
private spelersDialogListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.layout_dialog, null);
builder.setView(view)
.setTitle("Number of players:")
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setPositiveButton("apply", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String number = players.getText().toString();
listener.applytexts(number);
}
});
players = (EditText) view.findViewById(R.id.players);
return builder.create();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (spelersDialogListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() +
"must implement spelersDialogListener");
}
}
public interface spelersDialogListener {
void applytexts(String number);
}
}
在对话框片段中
@Override
public void onResume() {
super.onResume();
//Show the keyboard
players.post(new Runnable()
{
@Override
public void run()
{
players.requestFocus();
InputMethodManager imm =
(InputMethodManager)etMeterValue.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null)
imm.showSoftInput(etMeterValue, InputMethodManager.SHOW_IMPLICIT);
}
});
}