Dialog.setTitle不会显示全文

时间:2012-09-27 01:33:13

标签: android dialog

我一直在修改一个app,它有一个包含很多项目的列表视图。 当我长按一个项目时,它会显示一个带有重命名,删除和其他选项的菜单。 这个contextMenu有一个标题,使用从项目中获取的字符串,如固定文本和项目名称(我将它们收缩为一个字符串)。 一切顺利。

但是,当我单击“重命名”时,它会显示一个对话框。对话框标题由dialog.setTitle()设置,使用上面的相同字符串。但是当字符串长度足够小时,如小于20,那么它显示得很好。但是如果长度太长,就像30以上一样,那么它就不会显示字符串,只显示没有项目名称的固定文本。

我已经跟踪了应用并找到了设置标题时,字符串是相同的。但表现不同。唯一的区别是前者我使用ContextMenu.setHeaderTitle(),后者我使用Dialog.setTitle()。我传递的参数总是相同的。

菜单标题代码如下:

  public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    // TODO Auto-generated method stub
    AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfo;
    menu.add(0, CONTEXT_MENU_RENAME, 0, getString(R.string.preset_rename));
    menu.add(0, CONTEXT_MENU_DELETE, 0, getString(R.string.preset_delete));
    mItemId = mi.position;
    // super.onCreateContextMenu(menu, v, menuInfo);
    // Log.d(LOGTAG,"mItemId is :" + mItemId);
    String titleName = "" + getString(R.string.station_name)+ "" +getNameFromId(mItemId);
    Log.e(LOGTAG, "1. getNameFromId = " + titleName);
    menu.setHeaderTitle(titleName);
}

对话框标题代码如下:

 case DIALOG_RENAME_ID:
        String titleName = "" + getString(R.string.station_name)+ "" + getNameFromId(mItemId);
        Log.e(LOGTAG, "2. getNameFormId " + titleName);
        mRenameDialog.setTitle(titleName);   // Note: here set the dialog
        final EditText editText = (EditText) mRenameDialog
                .findViewById(R.id.name);
        editText.setText(getNameFromId(mItemId));
        Button bOk = (Button) mRenameDialog.findViewById(R.id.save);

        bOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String rename = editText.getText().toString();
                if (TextUtils.isEmpty(rename)) {
                    Context context = getApplicationContext();
                    Toast toast = Toast.makeText(context, getString(R.string.station_name_empty),
                            Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                } else {
                    saveStationName(mItemId,rename);
                    mRenameDialog.dismiss();
                }
            }
        });
        Button bCancel = (Button) mRenameDialog.findViewById(R.id.cancel);
        bCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mRenameDialog.dismiss();
            }
        });
        break;

有人知道原因吗?有人可以解释并修复它吗?

1 个答案:

答案 0 :(得分:1)

问题可能是对话框或ContextMenu的设置,它不是由您的应用定义的,而是公共组件设置。对话框或上下文菜单的标题是文本视图,可以通过singline属性设置。在这种情况下,可能是contextmenu没有设置singleLine属性,但是对话框将singleLine属性设置为true。 您可以查看源代码的dialog_title.xml文件。