2015-06-30 3 views
1

У меня есть AlertDialog титул, который будет центрировать по вертикали, когда содержание сообщения диалога не нужно прокручивать, как показано ниже:Название не центр по вертикали на AlertDialog

Теперь, когда содержание сообщения должно прокручивать название больше не выровнены по вертикали, как показано ниже:

enter image description here

Я попытался установить название и значок первоначально с использованием ВОЛП

builder.setTitle("Help"); 
builder.setIcon(R.drawable.help); 

И название не сосредоточено во второй ситуации с вышеуказанным кодом. С тех пор я пытался переключиться на макете XML для заголовка и используя builder.setCustomTitle(...); чтобы установить заголовок со следующим XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:minHeight="72dp" 
    android:orientation="horizontal" 
    android:gravity="center_vertical" 
    android:paddingLeft="14dp"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/help"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Help" 
    android:textSize="24sp" 
    android:textColor="#ff33b5e5"/> 

</LinearLayout> 

Я попытался атрибуты minHeight, gravity, layout_gravity и padding. Мне удалось центрировать заголовок во второй ситуации, используя атрибут padding, но тогда заголовок в первой ситуации больше не является центром. В то время как padding может работать, я хотел бы найти решение, которое будет поддерживать центральное положение в каждой ситуации независимо от того, нужно ли прокручивать сообщение. Я чувствую, что есть что-то простое и/или прямое, что я забыл.

Кроме того, содержимое сообщения просто устанавливается с использованием builder.setMessage();.

EDIT 1: Я должен уточнить, что я не хочу, чтобы название было центрировано по горизонтали, только вертикально, а левое выравнивание плюс маржа/отступы. В конечном итоге я хочу, чтобы каждая строка заголовка отображалась как первое изображение выше.

EDIT 2: Вот Java-код для диалога, если это помогает:

public class HelpDialog extends DialogFragment{ 
// Bundle variables/args 
final static String ARG_HELP = "help"; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View view = inflater.inflate(R.layout.custom_help_title, null); 

    Bundle args = getArguments(); 

    //initial way it was done 
    //builder.setTitle("Help"); 
    //builder.setIcon(R.drawable.help); 

    //now with the custom xml 
    builder.setCustomTitle(view); 
    builder.setMessage(args.getCharSequence(ARG_HELP)); 
    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dismiss(); 
     } 
    }); 

    return builder.create(); 
} 
} 

ответ

0

Так что я в конечном итоге решить это с более пользовательским макетом XML, который содержит сообщение TextView вместо использования .setMessage().

XML, в конечном итоге являются:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:gravity="center_vertical" 
    android:padding="10dp"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:src="@drawable/help"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:text="Help" 
     android:textSize="24sp" 
     android:textColor="#ff33b5e5"/> 
</LinearLayout> 

<View android:id="@+id/titleDivider" 
    android:layout_width="match_parent" 
    android:layout_height="2dip" 
    android:background="#ff33b5e5" /> 

<TextView 
    android:id="@+id/message" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:maxLines="16" 
    android:minLines="3" 
    android:scrollbars="vertical" 
    android:fadeScrollbars="false" 
    android:textSize="20sp" 
    android:padding="7dp"/> 

</LinearLayout> 

И код Java в конечном итоге, как:

public class HelpDialog extends DialogFragment{ 
// Bundle variables/args 
final static String ARG_HELP = "help"; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View view = inflater.inflate(R.layout.custom_help_title, null); 

    Bundle args = getArguments(); 

    builder.setView(view); 

    TextView message = (TextView) view.findViewById(R.id.message); 
    message.setMovementMethod(ScrollingMovementMethod.getInstance()); 
    message.setText(args.getCharSequence(ARG_HELP)); 

    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dismiss(); 
     } 
    }); 

    return builder.create(); 
} 
} 

Для того, чтобы получить прокрутки для больших сообщений функционировать должным образом решение от here был использован ,

Этот код дал мне следующие результаты:

enter image description here

enter image description here

0

Вы пробовали настройки тяжести просто «центр»? Избавиться от прокладки и т.д.

+0

Это центрирует название по горизонтали, однако вертикаль еще не сосредоточенных в названии. – TronicZomB

+0

Попробуйте установить значение силы тяжести в center_horizontal | center_vertical – Rohan

+0

Это то, что у меня есть, и у меня проблемы с видом, который по-прежнему не центрируется. – TronicZomB

2
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    TextView title_txt = new TextView(this); 
    title_txt.setGravity(Gravity.CENTER_HORIZONTAL); 
    title_txt.setText("Hello"); 
    title_txt.setTextSize(16); 
    builder.setCustomTitle(title_txt); 
    builder.setPositiveButton("Yes", 
      new DialogInterface.OnClickListener() 
    { 
       @Override 
     public void onClick(DialogInterface dialog, int which) 
     { 
     } 

    }); 
    builder.setNegativeButton("No", 
      new DialogInterface.OnClickListener() 
    { 
      @Override 
      public void onClick(DialogInterface dialog, int which) 
      { 
       dialog.dismiss(); 

      } 
    }); 
    builder.show(); 
+0

Этот код отлично подходит для заголовка, который появляется в центре. Спасибо –

+0

TextView в этом коде создается динамически, поэтому вам не нужно его в XML-файле ... –

+0

Это все еще толкает название вверх, а не по центру, во второй описанной ситуации выше. – TronicZomB

Смежные вопросы