返回介绍

Dialogs

发布于 2025-02-22 22:20:10 字数 8494 浏览 0 评论 0 收藏 0

In this chapter of the Android development tutorial we talk about dialogs. We discuss the Android AlertDialog .

A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc.

An AlertDialog is a dialog used to display information or to receive data. It can display one, two, or three buttons. It is created with a Builder subclass.

Displaying a message

We use the AlertDialog to display a message. In the example, we do not need to modify the manifest file.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:onClick="onClicked"
    android:text="@string/btn_label" />
    
</LinearLayout>

In the main.xml layout file, we have a Button widget. This button displays an AlertDialog .

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">DisplaySize</string>
  <string name="btn_label">Show</string>
</resources>

This is strings.xml file.

MainActivity.java

package com.zetcode.displaysize;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.graphics.Point;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.WindowManager;
import android.view.Display;

public class MainActivity extends Activity
{  
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }

  public void onClicked(View view)
  {
    Point p = getDisplaySize();

    AlertDialog ad = new AlertDialog.Builder(this).create();

    ad.setTitle("Display size");
    String msg = String.format("Width:%d, Height:%d", p.x, p.y);
    ad.setMessage(msg);
    ad.setIcon(android.R.drawable.ic_dialog_info);

    ad.setButton("OK", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
      }
    });

    ad.show();   
  }

  public Point getDisplaySize()
  {
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    Display ds = wm.getDefaultDisplay();

    Point p = new Point();
    ds.getSize(p);

    return p;
  }
}

We use the AlertDialog to display the size of the display.

Point p = getDisplaySize();

In the custom getDisplaySize() method, we determine the size of the display.

AlertDialog ad = new AlertDialog.Builder(this).create();

An instance of the AlertDialog is created.

ad.setTitle("Display size");
String msg = String.format("Width:%d, Height:%d", p.x, p.y);
ad.setMessage(msg);
ad.setIcon(android.R.drawable.ic_dialog_info);

We set a title, message and an icon for the dialog.

ad.setButton("OK", new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int which) {
    dialog.cancel();
  }
});

We add a button to the dialog. When we click on the OK button, the dialog is closed.

ad.show();

The show() method shows the dialog.

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display ds = wm.getDefaultDisplay();

We get the default display.

Point p = new Point();
ds.getSize(p);

We find out the size of the display with the getSize() method.

AlertDialog showing the size of the display
Figure: AlertDialog showing the size of the display

Receiving data

The second example uses the AlertDialog to receive data from a user. The dialog will ask a user for his name. It will then display the input in a TextView widget.

The manifest file is not modified.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  
  <Button
    android:id="@+id/btnId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:onClick="onClicked"
    android:text="@string/btn_label" />   
    
  <TextView
    android:id="@+id/tvId"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
    
</LinearLayout>

This is main.xml file. We have a Button widget and a TextView widget. The button will show the dialog window. The TextView will receive the input text from the dialog.

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">InputDialog</string>
  <string name="btn_label">Show dialog</string>
</resources>

This is the strings.xml resource file.

MainActivity.java

package com.zetcode.input;

import android.app.Activity;
import android.os.Bundle;
import android.app.AlertDialog;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.content.DialogInterface;

public class MainActivity extends Activity
{
  private TextView tv;
 
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView) findViewById(R.id.tvId);
  }

  public void onClicked(View view)
  {
    AlertDialog.Builder ad = new AlertDialog.Builder(this);

    ad.setTitle("Input");
    ad.setMessage("Enter your name");

    final EditText input = new EditText(this);
    ad.setView(input);

    ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dlg, int which) {
      String val = input.getText().toString();
      String msg = String.format("Hello %s!", val);
      tv.setText(msg);
      }
    });

    ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dlg, int which) {
      dlg.cancel();
      }
    });

    ad.show();
  }
}

Clicking on the button widget will display the AlertDialog . It has an EditText to receive the input from a user.

AlertDialog.Builder ad = new AlertDialog.Builder(this);

ad.setTitle("Input");
ad.setMessage("Enter your name");

We set a title and a message for the dialog.

final EditText input = new EditText(this);
ad.setView(input);

We add the EditText widget to the dialog.

ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dlg, int which) {
  String val = input.getText().toString();
  String msg = String.format("Hello %s!", val);
  tv.setText(msg);
  }
});

Clicking on the OK button of the dialog, we get the text from the EditText widget. The text used to format a greeting which is set to the TextView .

ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dlg, int which) {
  dlg.cancel();
  }
});

Clicking on the Cancel button will dismiss the dialog.

Receiving input
Figure: Receiving input

In this chapter of the Android development tutorial, we have shown two cases of the AlertDialog .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文