ProgramingTip

Android에서 알림의 가운데 텍스트

bestdevel 2020. 12. 31. 23:33
반응형

Android에서 알림의 가운데 텍스트


토스트의 모든 텍스트를 중앙에 표시하는 방법이 궁금합니다. 예를 들어, 2 줄의 텍스트가있는 토스트가 있습니다. 순전히 미적인 텍스트를 왼쪽 정렬 대신 정렬하고 싶습니다. 문서를 살펴본 결과 아무것도 없습니다. 내가 놓친 간단한 방법이 있습니까?

고마워 크리스


토스트의 사용 setView(view)을 공급하는 기능을 View함께 Gravity.CENTER.


다른 답변 에서 수정 :

Toast toast = Toast.makeText(this, "Centered\nmessage", Toast.LENGTH_SHORT);
TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
if( v != null) v.setGravity(Gravity.CENTER);
toast.show();

Toast는 TextView를 기반으로 기본 중력을 유지합니다. 예를 들어 다음과 같이 자신만의 TextView를 통과합니다.

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"
    android:text="all the text you want"
/>

그리고 다음과 같이 Toast에 TextView를 할당합니다.

Toast t = new Toast(yourContext);
t.setView(yourNewTextView);

더티 해킹이지만

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);

해킹없이 :

String text = "Some text";
Spannable centeredText = new SpannableString(text);
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),
            0, text.length() - 1,
            Spannable.SPAN_INCLUSIVE_INCLUSIVE);

Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show();

중앙 외에 또 다른 정렬이 있습니다.

출처


Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();

findViewById(android.R.id.message)틀린 은 아니지만 (미래?) 구현 차이가있는 경우를 대비하여 약간 다른 접근 방식을 사용했습니다 .

void centerText(View view) {
    if( view instanceof TextView){
        ((TextView) view).setGravity(Gravity.CENTER);
    }else if( view instanceof ViewGroup){
        ViewGroup group = (ViewGroup) view;
        int n = group.getChildCount();
        for( int i = 0; i<n; i++ ){
            centerText(group.getChildAt(i));
        }
    }
}

그리고 :

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();

그것은 나를 위해 일합니다.

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();

에서 코 틀린 :

fun makeToast(context: Context, resId: Int) {
    val toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT)
    val view = toast.view.findViewById<TextView>(android.R.id.message)
    view?.let {
        view.gravity = Gravity.CENTER
    }
    toast.show()
}

이 변형은 LinearLayout을 사용하는 것입니다. :)

Toast SampleToast = Toast.makeText(this, "This is the example of centered text.\nIt is multiline text.", Toast.LENGTH_SHORT);
LinearLayout OurLayout = (LinearLayout) SampleToast.getView();

if (OurLayout.getChildCount() > 0) 
{
TextView SampleView = (TextView) OurLayout.getChildAt(0);
SampleView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
}

SampleToast.show();

Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();

토스트를위한 간단한 코드

참조 URL : https://stackoverflow.com/questions/3522023/center-text-in-a-toast-in-android

반응형