2010-10-26 49 views

回答

51

剛剛發現這篇文章,同時試圖找出如何做同樣的事情。以下是我爲未來發現這一點的其他人做過的事情。

風格的XML如下:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
     <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
      <item name="android:windowTitleStyle">@style/PauseDialogTitle</item> 
     </style> 

     <style name="PauseDialogTitle" parent="@android:style/TextAppearance.DialogWindowTitle"> 
      <item name="android:gravity">center_horizontal</item> 
     </style> 
     <style name="DialogWindowTitle"> 
     <item name="android:maxLines">1</item> 
     <item name="android:scrollHorizontally">true</item> 
     <item name="android:textAppearance">@android:style/TextAppearance.DialogWindowTitle</item> 
     </style> 
    </resources> 

在我的活動onCreateDialog因爲我想要的對話框方法風格創建對話框是這樣的:

Dialog pauseDialog = new Dialog(this, R.style.PauseDialog); 
pauseDialog.setTitle(R.string.pause_menu_label); 
pauseDialog.setContentView(R.layout.pause_menu); 
+0

我試過了你的建議,但它沒有將對話框的標題居中(HTC Wildfire與Android 2.2.1一起運行)......任何想法?因爲直觀上你的解決方案很有意義:) – Ready4Android 2011-08-28 23:47:42

+0

對不起,不知道。我已經在我的Ideos和1.6和2.2的模擬器上測試過了,沒有任何問題。 – ChrisJD 2011-10-16 00:28:08

+1

沒有「parent =」@ android:style/DialogWindowTitle「」。 – Hesam 2011-11-30 10:35:31

1

如果您沒有撥打AlertDialog.Builder.setIcon()AlertDialog.Builder.setTitle(),那麼您的自定義對話框將不會顯示內置/默認標題View。在這種情況下,您可以添加自定義標題視圖:

AlertDialog.Builder.setView(View view) 

只要它是你誰創建這個視圖中,可以實現任何類型的對齊。

0

這裏是一個討厭的解決方案...擴展AlertDialog.Builder並覆蓋所有的方法(例如,setText,setTitle,setView等),以便不設置實際的Dialog文本/標題/視圖,而是在Dialog的View中創建一個新的視圖。那麼你可以隨心所欲地設計任何樣式。

爲了闡明,就父級而言,設置了視圖,沒有別的。

就您的自定義擴展類而言,一切都在該視圖內完成。

85

的另一種方式,這可以通過編程使用setCustomTitle()來完成:

// Creating the AlertDialog with a custom xml layout (you can still use the default Android version) 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.viewname, null); 
builder.setView(view); 

TextView title = new TextView(this); 
// You Can Customise your Title here 
title.setText("Custom Centered Title"); 
title.setBackgroundColor(Color.DKGRAY); 
title.setPadding(10, 10, 10, 10); 
title.setGravity(Gravity.CENTER); 
title.setTextColor(Color.WHITE); 
title.setTextSize(20); 

builder.setCustomTitle(title); 
+0

'R.layout.viewname'在此佈局中必須包含哪些內容?只有'TextView'? – DroidLearner 2012-12-22 03:28:20

+0

整個視圖部分不需要包含,只有當您想要自定義AlertDialog的默認視圖時才需要包含整個視圖部分。我確信它必須是一個TextView。 – 2012-12-23 13:55:38

+0

我得到這個textview的灰色邊框。我如何刪除它?我試過\t \t \t title.setBackgroundResource(R.drawable.black_border);但是這沒有幫助。 @LandLPartners – user1051505 2013-12-07 07:29:46

8

你可以做到這一點的代碼。假設你有對話框片段,然後添加下面的代碼行。

@Override 
public void onStart() 
{ 
    super.onStart(); 

    TextView textView = (TextView) this.getDialog().findViewById(android.R.id.title); 
    if(textView != null) 
    { 
     textView.setGravity(Gravity.CENTER); 
    } 
} 
+0

在appcompatv7對話框中不起作用 – Asthme 2015-12-03 07:43:57

+0

不適用於我。 findViewById(android.R.id.title);返回null。 – Alyoshak 2016-11-28 22:30:09

+0

它爲我工作。我試圖在***對話框***對象實例化之後獲得*** TextView ***。 – 2017-02-10 18:32:50

1

爲您定製DialogFragment你可以這樣做:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Dialog dialog = super.onCreateDialog(savedInstanceState); 
    final TextView textView = (TextView) dialog.findViewById(android.R.id.title); 
    if(textView != null) { 
     textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
    } 
    return dialog; 
} 
+0

這對我不起作用。 findViewById(android.R.id.title);返回null。 – Alyoshak 2016-11-28 22:31:47

1
TextView titleView = (TextView) dialog.findViewById(android.R.id.title); 
if(titleView != null) { 
titleView.setGravity(Gravity.CENTER); 
} 

詳情請參閱this KodeCenter article on Android Dialog and AlertDialog。(使用android.support.v7.app.AlertDialog

TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle); 
if(titleText != null) { 
    titleText.setGravity(Gravity.CENTER); 
} 

的完整代碼:

0

試試這個

AlertDialog.Builder helpDialogBuilder = new AlertDialog.Builder(context) 
     .setTitle(/*your title*/) 
     .setMessage(/*your message*/) 
     .setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         /*you can do something here*/ 

         dialog.dismiss(); 
        } 
       }) 
     .setPositiveButton("OK", 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         /*you can do something here*/ 

         dialog.dismiss(); 
        } 
       }); 

final AlertDialog helpDialog = helpDialogBuilder.create(); 

helpDialog.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override 
    public void onShow(DialogInterface dialog) { 

     TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle); if(titleText != null) { titleText.setGravity(Gravity.CENTER); } 

     TextView messageText = (TextView) helpDialog.findViewById(android.R.id.message); 
     if(messageText != null) { 
      messageText.setGravity(Gravity.CENTER); 
     } 
    } 
}); 

helpDialog.show();
1

您可以通過編程做沒有自定義視圖:

@Override 
public void onStart() 
{ 
    super.onStart(); 

    TextView textViewVanilla = (TextView) this.getDialog().findViewById(android.R.id.title); 
    if(textViewVanilla != null) 
    { 
     textViewVanilla.setGravity(Gravity.CENTER); 
    } 
    // support for appcompat v7 
    TextView textViewAppcompat = (TextView) this.getDialog().findViewById(android.support.v7.appcompat.R.id.alertTitle); 
    if(textViewAppcompat != null) 
    { 
     textViewAppcompat.setGravity(Gravity.CENTER); 
    } 
} 

感謝@hesam爲理念。對於appcompat佈局,請參見Android/sdk/platforms/android-26/data/res/layout/alert_dialog_title_material.xml

相關問題