2012-09-27 32 views
1

我一直在修改一個應用程序,其中有一個項目很多的列表視圖。 當我長時間按下某個項目時,會顯示一個包含重命名,刪除和其他選項的菜單。 此contextMenu有一個標題,使用從項目中獲取的字符串,如固定文本和項目名稱(我將它們合併爲一個字符串)。所有的事情都很順利。Dialog.setTitle將不會顯示全文

但是,當我單擊重命名時,它會顯示一個對話框。對話框標題由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; 

可能有人知道原因嗎?有人可以解釋它並修復它嗎?

+0

你能分享代碼嗎? – David

+0

@ David,當然,我更新了問題並粘貼了代碼。謝謝 – deercoder

回答

1

問題可能是對話框或ContextMenu的設置,它不是由您的應用程序定義的,而是通用組件設置。 dialog或者contextmenu的標題是一個textview,可以通過singline屬性來設置。在這種情況下,可能是contextmenu沒有設置singleLine屬性,但是該對話框將singleLine屬性設置爲true。 您可以檢查源代碼的dialog_title.xml文件。