ProgramingTip

Android의 사용자 지정 대화 상자 : 제목을 중앙에 배치해야 할 필요가 있습니까?

bestdevel 2020. 11. 16. 21:56
반응형

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

반응형