如何在Android应用程序中创建和显示对话框?

时间:2011-01-08 18:15:36

标签: android

晚上好,程序员。我有个问题。请帮我解决一下。 我正在写一个Android应用程序。我无法创建自定义对话框。我有错误或我的应用程序看起来非常糟糕。我的应用程序中有一些对话框。这是我的程序的一部分:

观点非常可怕,不是吗? 我希望其中一个布局位于对话框中,但它会显示在主活动中。为什么呢?

dialogtable.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout01"
 android:orientation="vertical"
 android:layout_height="fill_parent"
 android:layout_width="fill_parent"
 >
  <LinearLayout
   android:id="@+id/LinearLayout02"
   android:orientation="horizontal"
   android:layout_height="fill_parent"
   android:layout_width="fill_parent"
   >

   <TextView
    android:id="@+id/textRows"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:text="Amount of rows "/>

   <TextView
    android:id="@+id/textColumns"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:text="Amount of columns"/>

  </LinearLayout>

  <LinearLayout 
   android:id="@+id/LinearLayout03"
   android:orientation="horizontal"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   >

   <EditText
    android:id="@+id/EditText01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:inputType="number"
    android:gravity="right"/>


   <EditText
    android:id="@+id/EditText02"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"/>

  </LinearLayout>

  <LinearLayout 
   android:id="@+id/LinearLayout04"
   android:orientation="vertical"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   >

  <TextView
    android:id="@+id/textBorder"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:text="Width of border"/>

  <EditText
    android:id="@+id/EditText03"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="right"/>

  </LinearLayout>
</LinearLayout>

MainActivity的代码

@Override
protected Dialog onCreateDialog(int id) {
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

    View layout = inflater.inflate(R.layout.dialogtable, (ViewGroup)findViewById(R.id.LinearLayout01));

    AlertDialog.Builder alert = null;
    alert = new AlertDialog.Builder(this);
    alert.setView(layout);
    alert.setTitle("Create table");
    alert.setCancelable(false);
    alert.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {

        @Override
            public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    alert.setPositiveButton("OK",new DialogInterface.OnClickListener() {

        @Override
            public void onClick(DialogInterface dialog, int which) {

            Editable rows = fieldForRows.getText();
            Editable columns = fieldForColumns.getText();
            Editable border = fieldForWidthOfBroder.getText();


            TableAction tableAction = new TableAction(MainActivity.this.visualPane);
            tableAction.insertTable(rows, columns, border);
        }
    });
    Dialog dialog = null;
    dialog = new Dialog(this);
    switch (id) {
    case IDD_CUSTOM_INSERT_TABLE:
        dialog.setTitle("Insert table");
        dialog.setContentView(R.layout.dialogtable);
        return dialog;
    case IDD_CUSTOM_INSERT_IMAGE:
        dialog.setTitle("Insert image");
        return dialog;
    default:
        return alert.create();
    }
}

调用showDialog()之前应用程序的外观:

http://s015.radikal.ru/i330/1101/d0/f7cc38852dc6.jpg

调用showDialog()之后应用程序的外观:

http://s003.radikal.ru/i201/1101/f0/d1ebc436427f.jpg

为什么它看起来如此可怕?有什么问题?

1 个答案:

答案 0 :(得分:0)

在您的情况下,您应该使用RelativeLayout而不是LinearLayout。这样你就可以在TextViews上设置android:layout_weight和其他相关属性,使它们的宽度相等。

查看http://developer.android.com/resources/tutorials/views/hello-relativelayout.htmlhttp://developer.android.com/reference/android/widget/RelativeLayout.html