2012-05-16 2 views
6

Stackoverflow에는 많은 관련 질문이 있습니다.하지만 그 중 하나에 쓰여진 모든 것을 시도했지만 지금까지는이 작업을 할 수 없었습니다.EditText는 텍스트를 래핑하지 않을 것입니다

내 문제는 간단합니다. 안드로이드 응용 프로그램이 있고 사용자가 텍스트를 입력 할 수있는 상자가 있습니다. 그러나이 텍스트를 여러 줄로 표시하지 않으려면 ("\ n"이 없어야 함) 줄의 크기가 뷰포트보다 큰 경우 줄 바꾸기를 원합니다. 그래서 기본적으로, 내가 원하는 것은 Gmail Subject 필드의 textBox 필드와 동일한 동작입니다.

이 내 전경입니다 : ID가 ID/edit_question_value + @로 동일로

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

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/question" 
     android:textAppearance="@style/titleFont"/> 

<EditText 
    android:id="@+id/edit_question_value" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.3" 
    android:gravity="top" 
    android:inputType="textImeMultiLine|textEmailSubject" 
    android:maxLength="70" 
     > 

</EditText> 

<TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/answer" 
     android:textAppearance="@style/titleFont"/> 

<EditText 
     android:id="@+id/edit_question_answer" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:gravity="top" 
     android:layout_weight="0.7" 
     android:inputType="textMultiLine"/> 

<LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"> 

    <Button 
      android:id="@+id/save_question" 
      android:layout_width="120dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_weight="0.5" 
      android:text="@string/save"/> 

    <Button 
      android:id="@+id/cancel_edit_question" 
      android:layout_width="120dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:text="@string/cancel"/> 
</LinearLayout> 

나는이 문제를 갖고 싶어 텍스트는 TheOne 시스템이다. 지금까지 필자는 멀티 라인을 만들었고 (사용자가 원하는 경우 입력 할 수 있도록) 또는 한 줄짜리 텍스트를 줄 바꿈하지 못했습니다. 아마도 텍스트 주변의 일부 요소가 일부 간섭을 일으키고 있기 때문에 전체보기가 포함 된 것입니다.

무슨 일이 일어나는지 아는 사람 있습니까?

답변

8

이것은 이전에 많은 사람을 괴롭 히고 내가 필요할 때 대답을 찾을 수있었습니다. 순수한 XML에서는. 마크 업뿐만 아니라 프로그래밍을 사용할 수 있다면 약간 해킹으로 처리 할 수 ​​있습니다. 기본적으로 우리는 multiLine editText를 선언하고 새로운 줄을 피하기 위해 return 키를 잡아냅니다.

먼저

XML의 선언 :

<EditText 
    android:id="@+id/noReturnEditText" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionDone" 
    android:inputType="textMultiLine|textCapSentences" 
    android:text="lorem ipsum \n dolor site amet helping stackoverflow" /> 

예, 당신이 "무슨 생각을하는지 알고하지만, 이봐, 후안이는 multiliner EditText 내가 주제에 같은 하나 라이너를 원하는 Gmail의 영역 ". 알아요, 알아요.하지만 우리가 원하지 않는 다중 행 부분의 동작을 제거함으로써 지금 당장 처리 할 것입니다. 우리는 텍스트 포장을 유지하면서 을 수행하고을 원합니다.

이제 코드의 나머지 : 당신은 아마 아주 쉽게 코드를 읽을 수 있지만 경우에 누군가가, 우리 "는이 EditText에 우리가되고 싶어 OnKeyListener 설정하는 설명이 필요

EditText noReturnEditText = (EditText) findViewById(R.id.noReturnEditText); 
     noReturnEditText.setOnKeyListener(new OnKeyListener(){ 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_ENTER) return true; 
       return false; 
      } 
     }); 

online-multilinelike "이고 사용자가 리턴 키 (KEYCODE_ENTER)를 누르면이 컨텍스트에서 이벤트를 처리했음을 의미하는 true을 리턴하여 이벤트가 전파되지 않는다고 알립니다.

결과 :

enter image description here

고려

리턴 키를 누르면 새로운 라인을 입력하는 유일한 방법은 아니다. 사용자는 텍스트를 복사/붙여 넣을 수 있으며 한 줄짜리 EditText에 여러 줄 입력 항목이 있습니다. 걱정하지 마라!우리가 그것을 저장하거나

myData = rawText.replace(System.getProperty("line.separator"), " ");

처럼 뭔가를 사용하기 전에 우리는 값을 제거 할 수 있습니다 내가 EditText보기 많이있는 경우?

글쎄, 기본적으로 두 가지 옵션이 있습니다. 하나씩 차례로 수행하고 또는 등의 작업을 수행하면 각보기에 대한보기 및 반복이 나열됩니다.

//Declare the reusable listener 
    OnKeyListener myListener = new OnKeyListener(){ 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_ENTER) return true; 
      return false; 
     } 
    } 
//Loop through the views 
    int viewIds[] = {R.id.edittext1,R.id.edittext2,R.id.edittext3,R.id.edittext4}; 
    for(int id : viewIds) ((EditText)findViewById).setOnKeyListener(myListener); 
관련 문제