IT박스

Spinner가 텍스트를 줄 바꿈하지 않습니다. Android 버그입니까?

itboxs 2020. 11. 21. 14:20
반응형

Spinner가 텍스트를 줄 바꿈하지 않습니다. Android 버그입니까?


항목의 텍스트 Spinner가 너무 길어서 한 줄에 맞지 않으면 텍스트가 줄 바꿈되지 않고 잘립니다. 이는 API 레벨> = 11 인 경우 에만 해당 됩니다. 다음은 잘못된 동작을 보여주는 Android 4.2.2 (왼쪽) 와 예상대로 보이는 Android 2.3.3 (오른쪽)의 스크린 샷입니다 .

android:singleLine="false"여기서는 단순히 무시됩니다. 다른 모든 시도가 좋아 그래서 android:lines, android:minLinesTextView어떻게 든 윈도우 폭보다 훨씬 넓은 것 같다.

나는 다른 사람들이 같은 문제를 겪는 것을 보았지만 아무도 해결책을 찾지 못했습니다. 그렇다면 이것은 시스템 버그입니까? OS 버전 간의 이러한 불일치를 의도 할 수 있다고 생각하지 않습니다.


참고 :

비교적 간단한 해결책을 제안하는 몇 가지 답변이 있습니다.

  • 사용자 정의를 작성 Adapter하고 무시 getView()아니라으로 getDropDownView(). 여기에서는 해결책이 아닙니다.이 시점에서 여전히 원래 문제가 있기 때문입니다. 적절한 줄 바꿈을 처리하려면 레이아웃이 어떻게 보여야합니까?

  • TextView드롭 다운 뷰의을 상위로 래핑합니다 ViewGroup. android:layout_width="match_parent"이상하게도 부모의 너비가 무제한 인 것 같아서 작동하지 않습니다 .

  • 드롭 다운보기에 고정 너비를 제공합니다. 이것은 Spinner의 다른 너비에 적합하지 않습니다 .

  • 물론 \n텍스트에 s 를 수동으로 삽입하는 방법은 없습니다 .


다음 코드로 재현하십시오.

업데이트 : 나는 또한에 샘플 프로젝트로이 업로드 GitHub의 : 다운로드

/res/values/arrays.xml :

<string-array name="items">
    <item>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.</item>
    <item>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.</item>
</string-array>

/res/layout/spinner_item.xml :

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="none"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:singleLine="false" />

세트 Adapter:

spinner.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.items,
            R.layout.spinner_item));

holo 테마 스피너에서는 기본적으로 드롭 다운 모드를 사용합니다. 그리고 기본 스타일을 재정의하는 모든 이동은 스피너 모드를 api 11에서와 같이 여러 줄 텍스트를 성공적으로 래핑하는 대화 모드로 전환하는 것으로 이동합니다. 대신 new Spinner(context, Spinner.MODE_DIALOG)xml :을 사용 하거나에서 스피너를 만들 수 있습니다 android:spinnerMode="dialog". 그러나 드롭 다운이 아니라 대화이기 때문에 문제가 해결되지 않습니다.

나는이 문제에 대한 또 다른 해결책을 찾았습니다 : Override getDropDownViewmethod in ArrayAdapterand put setSingleLine(false)in post method of view. 따라서 뷰가 완전히 생성되면 텍스트를 적절한 줄로 래핑합니다.

@Override
public View getDropDownView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = new TextView(_context);
    }

    TextView item = (TextView) convertView;
    item.setText("asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
    final TextView finalItem = item;
    item.post(new Runnable() {
        @Override
        public void run() {
            finalItem.setSingleLine(false);
        }
    });
    return item;
}

최신 정보:

그리고 여기 또 다른 대답이 있습니다.

PopupWindow에서 listview를 수동으로 래핑하고 클릭시 TextView 아래에 표시하고 listItem 클릭시 숨 깁니다.

아이디어를 보여주는 간단한 구현 :

public class MySpinner extends TextView {
    private PopupWindow _p;
    private ListView _lv;
    public MySpinner(Context context) {
        super(context);
        init();
    }
    public MySpinner(Context context, AttributeSet attributeSet){
        super(context, attributeSet);
        init();
    }

    private void init(){
        setBackgroundResource(R.drawable.spinner_background);
        final List<String> list = new ArrayList<String>();
        list.add("Very long text AAAAAAAAAAAAAAAA");
        list.add("1 Very long text AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
        list.add("2 Very long text A");
        list.add("3 Very long text AAAAAAAAA");

        setMinimumWidth(100);
        setMaxWidth(200);

        _lv = new ListView(getContext());
        _lv.setAdapter(new ArrayAdapter<String>(getContext(), R.layout.simple_list_item_1, list));
        _lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                _p.dismiss();
                setText(list.get(i));
            }
        });

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {

                _p = new PopupWindow(getContext());
                _p.setContentView(_lv);
                _p.setWidth(getWidth());
                _p.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
                _p.setTouchable(true);
                _p.setFocusable(true);
                _p.setOutsideTouchable(true);
                _p.showAsDropDown(view);
            }
        });
    }
}

대화 스타일 스피너로 전환하여이 문제를 해결했습니다.

<Spinner
  ...
android:spinnerMode="dialog" />

여기에 솔루션 조합만이 효과가있었습니다 (Android 5.1에서도 테스트 됨) :

spinner_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="wrap_content">

  <TextView
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:textAlignment="inherit"/>
</LinearLayout>

암호

  final ArrayAdapter<String> spinnerArrayAdapter=new ArrayAdapter<String>(activity,R.layout.spinner_item,android.R.id.text1,spinnerItemsList)
  {
  @Override
  public View getDropDownView(final int position,final View convertView,final ViewGroup parent)
    {
    final View v=super.getDropDownView(position,convertView,parent);
    v.post(new Runnable()
    {
    @Override
    public void run()
      {
      ((TextView)v.findViewById(android.R.id.text1)).setSingleLine(false);
      }
    });
    return v;
    }
  };
  spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

TextView 주위에 LinearLayout을 추가하면 텍스트가 올바르게 래핑 될 수 있습니다.

레이아웃 (common_domainreferencemodel_spinner_item.xml) :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:padding="4dp">

       <TextView
            android:id="@+id/nameTextView"
            android:singleLine="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>

어댑터:

public class DomainReferenceModelAdapter extends ArrayAdapter<DomainReferenceModel> {

    private List<DomainReferenceModel> objects;
    private LayoutInflater inflater;
    private int oddRowColor = Color.parseColor("#E7E3D1");
    private int evenRowColor = Color.parseColor("#F8F6E9");

    public DomainReferenceModelAdapter(Context context, int resource, List<DomainReferenceModel> objects) {
        super(context, resource, objects);
        this.objects = objects;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    static class ViewHolder {
        public TextView nameTextView;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getViewInternal(position, convertView, parent, false);
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getViewInternal(position, convertView, parent, true);
    }

    private View getViewInternal(int position, View convertView, ViewGroup parent, boolean isDropdownView) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.common_domainreferencemodel_spinner_item, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.nameTextView = (TextView) view.findViewById(R.id.nameTextView);
            view.setTag(viewHolder);
        }
        if (isDropdownView) {
            view.setBackgroundColor(position % 2 == 0 ? evenRowColor : oddRowColor);
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        DomainReferenceModel model = objects.get(position);
        holder.nameTextView.setText(model.getName());
        return view;
    }

}

내가 시도한 것에서 테마 Spinner를 사용하여 한동안 여러 줄 드롭 다운 항목을 달성 하는 Holo것은 불가능합니다.

해결 방법은 다음과 같습니다.

  • Spinner에서 상속하지 않는에 대한 스타일을 만듭니다 Holo. 이렇게하면 여러 줄 드롭 다운 항목이 활성화됩니다.
  • Spinner의 스타일을 '수동'으로 지정하여 Holo테마 가있는 것처럼 보이게합니다.

그러면 다음과 같은 결과가 생성됩니다 (닫힌 상태 및 열린 상태 표시).

여기에 이미지 설명 입력

구현 세부 사항 :

드롭 다운 항목의 속성을 로 설정하고 사용자 지정 레이아웃을 제공 하더라도 드롭 다운 항목의 Holo테마에서 상속 Spinner하고 Spinner드롭 다운 항목 에 여러 줄을 표시 할 수 있는 방법이 없습니다 . 나는 또한 스타일을 유지하려고 시도했지만TextView singleLinefalseHolo

android:spinnerStyle
android:spinnerItemStyle 
android:spinnerDropDownItemStyle 

스타일 속성 ( 여기에서 이러한 속성을 사용하는 예)을 사용 했지만 여러 줄 결과를 생성 할 수는 없습니다.

그러나에 대한 스타일을 재정의하고 에서 Spinner상속하지 않는 경우 :spinnerStyleHolo

 <style name="AppTheme" parent="android:Theme.Holo.Light">
    <item name="android:spinnerStyle">@style/spinnerStyle</item>
</style>

<--no parent attribute-->
 <style name="spinnerStyle">
    <item name="android:clickable">true</item>
</style>

그러면 드롭 다운 항목이 여러 줄 표시를 지원합니다. 하지만 지금 우리는 잃어버린 Holo온 테마 Spinner와 같은 닫힌 상태의 모습 TextView이 아닌 Spinner전혀 화살표 또는 시각적 단서와 함께 그것은이다 Spinner. 대신 spinnerStyleparent를 다음과 parent="android:style/Widget.Spinner같이 설정하면 :

<style name="spinnerStyle" parent="android:style/Widget.Spinner">
    <item name="android:clickable">true</item>
</style>

Spinner폐쇄 상태에있는 화살표를 보여줍니다하지만 회색 사전 홀로처럼 스타일됩니다 SpinnerA의 장소 밖으로 보이는 Holo응용 프로그램.

따라서 가능한 해결책은 다음과 같습니다.

  • 테마를 재정의하고 부모 spinnerStyle에게는 사용하지 마십시오 Holo. 이렇게하면 드롭 다운 항목에서 여러 줄 텍스트를 사용할 수 있습니다.
  • 테마를 Spinner상속하는 것처럼 배경을 변경하십시오 Holo.

예를 들면 다음과 같습니다.

기본 활동 만들기 :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Spinner spinner = (Spinner)findViewById(R.id.styled_spinner);

    spinner.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.items,
            R.layout.spinner_item));        
}

활동 레이아웃 :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="50dip"
    tools:context=".MainActivity" >

    <Spinner
        android:id="@+id/styled_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

스타일 :

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="android:Theme.Holo.Light">
        <item name="android:spinnerStyle">@style/spinnerStyle</item>
    </style>
    <style name="spinnerStyle">
        <item name="android:clickable">true</item>
        <item name="android:background">@drawable/spinner_background_holo_light</item>
    </style>
</resources>

드로어 블 폴더에 spinner_background_holo_light를 배치합니다.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
        android:drawable="@drawable/spinner_disabled_holo_light" />
    <item android:state_pressed="true"
        android:drawable="@drawable/spinner_pressed_holo_light" />
    <item android:state_pressed="false" android:state_focused="true"
        android:drawable="@drawable/spinner_focused_holo_light" />
    <item android:drawable="@drawable/spinner_default_holo_light" />
</selector>

drawables-hdpi폴더에 다음 드로어 블을 포함 합니다.

여기에 이미지 설명 입력 spinner_default_holo_light.9.png

여기에 이미지 설명 입력 spinner_disabled_holo_light.9.png

여기에 이미지 설명 입력 spinner_focused_holo_light.9.png

여기에 이미지 설명 입력 spinner_pressed_holo_light.9.png

이렇게하면 Holo위의 스크린 샷에 표시된 것처럼-테마가 닫힌 상태 및 여러 줄 항목 이있는 스피너가 생성 됩니다.

이 예제의 드롭 다운 항목은 Holo테마가 아니지만 드롭 다운 항목을 여러 줄로 표시하는 것이 정말 중요한 경우 허용 가능한 절충안 일 수 있습니다.

이 예에서, android:minSdkVersion로 설정 14하고 android:targetSdkVersion17매니페스트.

Holo그래픽과 spinner_background_holo_light.xml코드는 HoloEverywhere Copyright (c) 2012 Christophe Versieux, Sergey Shatunov에서 가져 왔습니다. 라이선스 세부 사항은 링크 된 github 프로젝트를 참조하십시오.


나는 같은 문제에 직면했다. 스피너의 드롭 다운 목록에서 두 줄을보고 싶지만 내가 찾은 모든 솔루션은 그러한 간단한 문제를 해결하는 데 비합리적인 것 같습니다. 나는 조사 스피너 소스 코드를 그리고 나는 우리가 사용하는 경우 발견 지정 .XML을 속성으로 안드로이드 : 만일 Singleline = "거짓"

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/multiline_spinner_text_view"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:singleLine="false" />

기본 ArrayAdapter, 매번 ListPopupWindow 에서 실행되는 코드 다음

    @Override
       View More obtainView(int position, boolean[] isScrap) {
            View view = super.obtainView(position, isScrap);

           if (view instanceof TextView) {
                ((TextView) view).setHorizontallyScrolling(true);
            }

            return view;        
}

이것이 바로 목록 행당 하나의 문자열 행만 보는 이유입니다. 실제로 스크롤됩니다.

이러한 문제를 해결하려면 뷰가 TextView의 인스턴스아니 어야 합니다. TextView를 FrameLayout 또는 LinearLayout 안에 넣으십시오.

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <CheckedTextView
            android:id="@+id/multiline_spinner_text_view"
            android:layout_width="fill_parent"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:singleLine="false" />

    </LinearLayout>

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
               R.layout.multiline_spinner_dropdown_item,R.id.multiline_spinner_text_view,
                awasomeListValues);

이 솔루션은 스피너 모드 (MODE_DROPDOWN 및 MODE_DROPDOWN) 모두에서 작동합니다.


안드로이드에 버그가 있다고 생각합니다. 이것을 시도 할 수 있습니다. 텍스트에서 공백을 제거한 다음 제대로 표시됩니다. textview의 길이가 문자열의 길이보다 작 으면 공백 뒤의 모든 문자를 무시합니다. 해결 방법으로 다음을 시도해 볼 수 있습니다.

샘플 코드를 사용하여 multiline_spinner_dropdown_item.xml이라는 파일을 res / layout 폴더에 추가합니다.

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee" />

스피너를 만들 때이 레이아웃에서 만듭니다.

다음과 같은 것 :

ArrayAdapter.createFromResource(this, items, R.layout.multiline_spinner_dropdown_item);

기본적으로 android.R.layout.simple_spinner_dropdown_item 레이아웃을 프로젝트에 복사하고 CheckedTextView에서 singleLine 속성을 false로 설정하여 레이아웃을 수정합니다.


방금 안드로이드에이 케이스에 대한 기존 스타일이 있음을 발견했습니다.

final Spinner pelanggaran = (Spinner) findViewById(R.id.pelanggaran);
ArrayAdapter<CharSequence> pelanggaran_adapter = ArrayAdapter.createFromResource(this,R.array.pelanggaran_array, android.R.layout.simple_expandable_list_item_1);
pelanggaran_adapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
pelanggaran.setAdapter(pelanggaran_adapter);

문제가 해결되기를 바랍니다.


이 답변 읽기 : textview 캐스팅 오류 : -android.widget.LinearLayout은 android.widget.TextView 및이 주제 로 캐스팅 할 수 없습니다 .이 문제를 해결할 수 있습니다. 텍스트 가져 오기를 피하기 위해 TextView (스피너 텍스트)를 래핑하는 LinearLayout이 필요합니다. 하지만 해결해야 할 몇 가지 문제가 있습니다. 시작하려면 레이아웃을 생성합니다 ( 저는 spinner_dd_item.xml이라고했습니다 ).

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/simple_spinner_dropdown"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="5dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="5dp"
            android:textColor="@color/colorAccent"
            tools:text="Hello" />
    </LinearLayout>

다음 단계는 ArrayAdapter 인스턴스를 만들어 스피너로 설정하는 것입니다.

    ArrayAdapter<CharSequence> arrayAdapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.spinner_dd_item,
            R.id.simple_spinner_dropdown, hashmapToString(hashMap, keys)) {
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return getView(position, convertView, parent);
        }
    };
    spinner.setAdapter(arrayAdapter);

LinearLayout을 추가하고 TextView를 지정하고 데이터 세트의 지정된 위치에 데이터를 표시하는 뷰를 가져 오려면 getDropDownView를 재정의해야하므로 ArrayAdapter에 레이아웃 이름과 TextView ID를 추가하는 것을 잊지 마십시오. 이제 스피너가 최신 및 이전 Android 버전에서 잘 작동하는 것을 볼 수 있습니다.


나는 이와 같은 문제가 있었고 해결책을 찾았습니다.

텍스트가 초기 디스플레이와 드롭 다운보기에서도 줄 바꿈되기를 원했습니다.

텍스트는 초기 디스플레이에서 래핑되었고 드롭 다운의 경우 텍스트보기를 포함하는 고정 너비의 선형 레이아웃의 사용자 지정보기를 사용하도록 권장하는 또 다른 솔루션을 찾았습니다. 이로 인해 스피너의 드롭 다운과 초기 선택의 드롭 다운이 올바르게 표시되었습니다. 그러나 이로 인해 구형 장치에서 큰 문제가 발생했습니다.

다른 항목을 선택하려고하면 초기 디스플레이가 새로 고쳐지지 않고 텍스트가 겹쳐진 모양으로 나타납니다. 그리고 아래로 쌓였 기 때문에 배경을 추가해도 도움이되지 않았습니다.여기에 이미지 설명 입력

어댑터에는 setDropDownViewResource ()라는 메서드가있어 스피너의 초기 선택에 표시되는 것과 다른 드롭 다운보기를 설정할 수 있습니다.

 import org.holoeverywhere.widget.Spinner;

 ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this,R.array.array_of_strings,R.layout.simple_list_item_1);
 adapter1.setDropDownViewResource(R.layout.my_simple_list_item_1);
 spQ1.setAdapter(adapter1);

이 예에서 simple_list_item은 android에서 제공하는 기본보기이고 my_simple_list_item은

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="300dp"
android:layout_height="wrap_content" >   

<TextView
  android:id="@+id/android:text1"
  android:layout_width="wrap_content"
  android:layout_height="50dp"
  android:ellipsize="marquee"
  android:layout_gravity="center_vertical"
  android:singleLine="false"/>

</LinearLayout> 

이제 텍스트가 스피너의 드롭 다운보기와 스피너가 선택한 항목을 표시합니다.


다음 TextViewLinearLayout같이 포장하십시오 .

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
    <TextView
            android:id="@android:id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
</LinearLayout>

ArrayAdapter<?> specAdapter =
   ArrayAdapter.createFromResource(
       getActivity().getBaseContext(),
       aa[position],
       android.R.layout.select_dialog_item);
specAdapter.setDropDownViewResource(android.R.layout.select_dialog_item);

작동시키기 위해 내가 한 작업은 다음과 같습니다.

ArrayAdapter<KeyValue> adapter = new ArrayAdapter<>(getContext(), R.layout.simple_dropdown_item_multiline, R.id.nameTextView, choices);

그리고 이것은 "simple_dropdown_item_multiline"의 내용입니다 :

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

<TextView android:id="@+id/nameTextView"
          style="?android:attr/dropDownItemStyle"
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:ellipsize="marquee"
          android:paddingBottom="@dimen/large"
          android:paddingTop="@dimen/large"
          android:singleLine="false"
          android:textAppearance="?android:attr/textAppearanceLargePopupMenu"/>


텍스트에 \ n (새 줄)을 추가하여이 문제를 해결했습니다 (간단하게).

<string name="bmr1">sedentary (little or no exercise)</string>
<string name="bmr2">lightly active (light exercise/\nsports 1-3 days/week)</string>
<string name="bmr3">moderately active (moderate exercise/\nsports 3-5 days/week)</string>
<string name="bmr4">very active (hard exercise/\nsports 6-7 days a week)</string>
<string name="bmr5">extra active (very hard exercise/sports &amp;\nphysical job or 2x training)</string>

다음과 같이 보입니다.

여기에 이미지 설명 입력

그리고 이것은 스피너가 행으로 사용하는 레이아웃입니다.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/default_listview_row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:gravity="center_vertical"
    android:textColor="@android:color/white"
    android:background="@android:color/transparent"
    android:padding="5dp" />

참고 URL : https://stackoverflow.com/questions/14139106/spinner-does-not-wrap-text-is-this-an-android-bug

반응형