1

多くのアイテムを含むリストビューを持つアプリを変更しています。アイテムを長押しすると、名前の変更、削除、その他のオプションを含むメニューが表示されます。この contextMenu には、固定テキストとアイテム名のような、アイテムから取得した文字列を使用したタイトルがあります (1 つの文字列として縮約します)。すべてがうまくいきます。

ただし、[名前の変更] をクリックすると、ダイアログが表示されます。ダイアログのタイトルは、上記と同じ文字列を使用して、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;

誰かが理由を知ることができますか?そして、誰かがそれを説明して修正できますか?

4

1 に答える 1

1

問題は、アプリで定義されていないダイアログまたは ContextMenu の設定である可能性がありますが、共通コンポーネントの設定です。ダイアログまたはコンテキストメニューのタイトルはテキストビューで、singline 属性で設定できます。この場合、contextmenu では singleLine 属性が設定されていませんが、ダイアログでは singleLine 属性が true に設定されている可能性があります。ソース コードの dialog_title.xml ファイルを確認できます。

于 2012-09-28T01:17:47.590 に答える