Android의 사용자 지정 대화 상자 : 제목을 중앙에 배치해야 할 필요가 있습니까?
Android 애플리케이션을 개발 중입니다.
사용중인 사용자 지정 대화 상자의 제목을 중앙에 배치 한 배송 상자?
동일한 작업을 수행하는 방법을 알아내는 동안이 게시물을 찾았습니다. 미래에 발견되는 다른 사람을 위해 내가 한 방법은 다음과 달라집니다.
스타일 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);
이를 프로그래밍 방식으로 수행 할 수있는 또 다른 방법은 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);
코드는 할 수 있습니다. 대화 조각이 구축 가정하고 다음 코드 줄을 추가하십시오.
@Override
public void onStart()
{
    super.onStart();
    TextView textView = (TextView) this.getDialog().findViewById(android.R.id.title);
    if(textView != null)
    {
        textView.setGravity(Gravity.CENTER);
    }
}
사용자 지정보기없이 프로그래밍 방식으로 수행 할 수 있습니다.
@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
당신이 전화를하지 않는 경우 AlertDialog.Builder.setIcon()및 AlertDialog.Builder.setTitle()다음 사용자 정의 대화 상자가 내장 / 기본 제목보기를 표시하지 않습니다. 이 경우 사용자 정의 제목보기를 추가 할 수 있습니다.
AlertDialog.Builder.setView(View view)
이 뷰를 생성하는 즉시 모든 유형의 정렬을 구현할 수 있습니다.
사용자 정의 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;
}
TextView titleView = (TextView) dialog.findViewById(android.R.id.title);
if(titleView != null) {
titleView.setGravity(Gravity.CENTER);
}
자세한 내용은 Android Dialog 및 AlertDialog에 대한 이 KodeCenter 문서 를 참조하십시오.
여기에 대화 제목을 수정하기위한 몇 가지 시작 팁이 있습니다. Android- 런타임에 사용자 지정 제목 변경 중앙에 배치 할 수 있는지 (시도하지 않을 경우에는 매우 가능합니다.)
여기에 불쾌한 해결책이 있습니다 .... AlertDialog.Builder를 확장하고 모든 메소드 (예 : setText, setTitle, setView 등)를 재정 의하여 실제 대화 상자의 텍스트 / 제목 /보기를 설정하지 않고 대화 상자의보기 내에 새보기를 만듭니다. 거기에서 모든 것을하십시오. 그러면 원하는대로 모든 스타일을 자유롭게 지정할 수 있습니다.
명확히하기 위해 부모 클래스에 관한 한 View가 설정되고 다른 것은 없습니다.
사용자 정의 확장 클래스에 관한 한 모든 것이 해당 뷰 내에서 수행됩니다.
이 시도:
TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle);
if(titleText != null) {
    titleText.setGravity(Gravity.CENTER);
}
전체 코드 (사용 android.support.v7.app.AlertDialog) :
 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();     AlertDialog alertDialog = new AlertDialog.Builder(activity)
            .setMessage(message)
            .create();
    alertDialog.setIcon(R.mipmap.ic_launcher_round);
    @SuppressLint("RestrictedApi")
    DialogTitle titleView=new DialogTitle(activity);
    titleView.setText(title);
    titleView.setPaddingRelative(32,32,32,0);
    alertDialog.setCustomTitle(titleView);
@LandL Partners 솔루션과 유사하지만 Kotlin에서 :
val builder = AlertDialog.Builder(this)
val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val view = inflater.inflate(R.layout.viewname, null)
builder.setView(view)
val title = TextView(this)
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)
참고 URL : https://stackoverflow.com/questions/4025605/custom-dialog-on-android-how-can-i-center-its-title
'ProgramingTip' 카테고리의 다른 글
| Vim에서 공백을 새 줄로 바꿀 수 없습니다. (0) | 2020.11.16 | 
|---|---|
| Javascript를 사용하여 정수를 가장 가까운 10으로 반올림하는 방법 (0) | 2020.11.16 | 
| IF가 IF-ELSE보다 더 잘 검증 되었습니까? (0) | 2020.11.16 | 
| 어떤 것이 더 빠르고 더 낫입니까? (0) | 2020.11.16 | 
| Parcelable의 하위 클래스를 다른 Parcel에 작성 (0) | 2020.11.16 |