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 |