2016-05-14 208 views
1

我不知道我的EditText真的發生了什麼!從文本視圖編輯文本到android中的編輯文本

我有一個TextView,一個EdiText和一個按鈕。

需要的邏輯是: 單擊該按鈕時,使用TextView的內容設置EditText。 點擊「完成」後,TextView將顯示EditText的內容。

這是我到目前爲止的代碼:

 speech_text = (TextView) findViewById(R.id.speech); 
     speech_text_edit = (EditText) findViewById(R.id.speech_edit); 
     editBTN= (Button) findViewById(R.id.edit); 
     editBTN.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      speech_text_edit.setText(speech_text.getText().toString()); 
      speech_text.setVisibility(View.GONE); 
      speech_text_edit.setVisibility(View.VISIBLE); 
      //open keyboard 
      InputMethodManager show_imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
      show_imm.showSoftInput(editBTN, InputMethodManager.SHOW_IMPLICIT); 

      speech_text_edit.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
         speech_text.setText(speech_text_edit.getText().toString()); 
         speech_text_edit.setVisibility(View.GONE); 
         speech_text.setVisibility(View.VISIBLE); 
         speech_text_edit.setFocusable(false); 

         //close keyboard 
         InputMethodManager hide_imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
         hide_imm.hideSoftInputFromWindow(editBTN.getWindowToken(), 0); 
        } 
        return true; 
       } 
      }); 
     } 
    }); 

佈局代碼:

<TextView 
    android:id="@+id/speech" 
    android:layout_width="match_parent" 
    android:layout_height="350dp" 
    android:layout_margin="25dp" android:layout_marginBottom="150dp" 
    android:textSize="25sp" android:textAlignment="inherit" 
    android:background="@drawable/curved_background" 
    android:textIsSelectable="true" 
    android:padding="10dp" android:visibility="visible" 
    /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="350dp" 
    android:id="@+id/speech_edit" 
    android:background="@drawable/curved_background" 
    android:imeActionLabel="actionDone" 
    android:visibility="gone" 
    android:textSize="25sp" 
    android:layout_margin="25dp" android:layout_marginBottom="150dp" 
    android:inputType="textAutoCorrect" 
    android:layout_gravity="top" 
    android:focusable="true"/> 

我的問題是:

  1. 只能使用一次!之後,沒有鍵盤和指針。
  2. EditText在中心顯示一行文字。爲什麼?

感謝您的幫助。

這logCats:

05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper 

D/SensorManager: unregisterListener:: Listener= [email protected]15f0c8 
05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper D/Sensors: Remain listener = Sending .. normal delay 200ms 
05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper I/Sensors: sendDelay --- 200000000 
05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper D/SensorManager: JNI - sendDelay 
05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper I/SensorManager: Set normal delay = true 
05-14 19:26:45.045 15484-15484/type_helper.maxsoft.com.typehelper D/SensorManager: registerListener :: handle = 0 name= LSM330DLC 3-axis Accelerometer delay= 200000 Listener= [email protected]15de80 
05-14 19:26:45.050 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getExtractedText on inactive InputConnection 
05-14 19:26:45.065 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getCursorCapsMode on inactive InputConnection 
05-14 19:26:45.080 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getSelectedText on inactive InputConnection 
05-14 19:26:45.080 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection 
05-14 19:26:45.080 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection 
05-14 19:26:45.100 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getSelectedText on inactive InputConnection 
05-14 19:26:45.100 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: setComposingText on inactive InputConnection 
05-14 19:26:45.100 15484-15484/type_helper.maxsoft.com.typehelper W/IInputConnectionWrapper: getExtractedText on inactive InputConnection 
05-14 19:27:01.140 15484-15484/type_helper.maxsoft.com.typehelper D/SensorManager: unregisterListener:: Listener= [email protected]15de80 
05-14 19:27:01.140 15484-15484/type_helper.maxsoft.com.typehelper D/Sensors: Remain listener = Sending .. normal delay 200ms 
05-14 19:27:01.140 15484-15484/type_helper.maxsoft.com.typehelper I/Sensors: sendDelay --- 200000000 
05-14 19:27:01.140 15484-15484/type_helper.maxsoft.com.typehelper D/SensorManager: JNI - sendDelay 
05-14 19:27:01.140 15484-15484/type_helper.maxsoft.com.typehelper I/SensorManager: Set normal delay = true 
+0

你的logcat沒有錯誤,所以我不確定你試圖顯示什麼 –

+0

好的,我再解釋一下。 T.V.編寫了「你好」。 editBTN被點擊。 E.T.用鍵盤和指針顯示「Hello」。我將它編輯爲「Hello world」。點擊完成BTN,T.V.顯示「Hello world」。沒關係。現在我再次點擊editBTN。 E.T.也顯示「Hello world」,但軟鍵盤和指針不顯示/開始。 –

+0

'setFocusable(false)'阻止您再次輸入編輯文本。 – njzk2

回答

1

TL; DR

TextView#setFocusable(true); 
TextView#requestFocus(); 

之前顯示鍵盤。

InputMethodManager#showSoftInput(FOCUSED_VIEW, 0); 

刪除

TextView.setFocusable(false); 

FOCUSED_VIEW應該是你speed_edit_text!不是按鈕。

還要確保您EditText以下屬性設置爲啓用多行輸入:

android:inputType="textAutoCorrect|textMultiLine" 
android:layout_gravity="top" 
android:lines="8" 
android:gravity="top|start" 
android:minLines="6" 
android:maxLines="10" 
android:scrollbars="vertical" 

的最小值,最大值和行值是任意的號碼,但你可以用它來設置的域盒子的高度。

The result

關於重點

的問題是你TextView#setFocusable(false)電話。當你將它設置爲false時,你也會失去焦點到這個元素。所以現在當你再次顯示它時,Android不知道爲什麼要顯示鍵盤(因爲EditText在顯示時不會自動聚焦)。既然你隱藏了視圖,你真的不需要使它無法集中,它是GONE,所以它不能集中。

  • 要求重點要編輯的觀點,當你要顯示鍵盤(View#requestFocus
  • 顯示的鍵盤聚焦視圖
  • 當您完成後,隱藏鍵盤
  • 無論是明確重點或隱藏焦點元素(這是你做什麼)(View#clearFocus

關於輸入管理

可以顯示具有三個值中的一個的鍵盤:

  • 0:這是default when you click一個EditText
  • 1(SHOW_IMPLICIT):這是不能直接由用戶請求
  • 2(SHOW_FORCED) :力顯示它,直到用戶「勢力」它關閉

您可以隱藏鍵盤有三個值中的一個:

  • 0:這是default when you defocus一個EditText
  • 1:(HIDE_IMPLICIT):隱藏它,如果它用SHOW_IMPLICIT
  • 2中所示:(HIDE_NOT_ALWAYS):隱藏它除非其用SHOW_FORCED
  • 所示

但是,你可以強制所有你想要的。如果某個元素不可聚焦,則不會通過顯示鍵盤來獲取automagic焦點。

+0

非常好!非常感謝。但是當我使用'textMultiLine'完成鍵消失!你建議我使用動作模式完成或做另一個。(將文本從編輯文本傳遞到文本視圖) –

+0

是的。如果使用IME操作,則不會替換完成,它會在長按「輸入」鍵時隱藏。我建議你不要隱藏編輯按鈕,而是將編輯按鈕改爲「完成」按鈕。 基本上:如果編輯:編輯按鈕完成。如果沒有編輯:編輯按鈕即可編輯。 –

+0

Ya。我更喜歡有「Enter」鍵。並將它保存在我的鍵盤上......但是如何完成編輯過程?必須要隱藏軟鍵盤。我該怎麼做,請給我你的建議? –

0
boolean bool =false; 

editBTN= (Button) findViewById(R.id.edit); 
editBTN.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     if (!bool) 
     { 
      speech_text_edit.setText(speech_text.getText().toString()); 
      bool = true; 
     }else 
     { 
      speech_text.setText(speech_text_edit.getText().toString()); 
      bool = false; 
     } 


    } 
}); 
+0

我不想限制行號。我想通常從編輯文本的開頭放置文本。 –

+0

我沒有得到你的問題。您有1個Textview,EditText和Button,然後在按鈕上單擊您想要將Textview的文本設置爲EditText,然後在第二次單擊按鈕時再次將TextTextTextText設置爲TextView。這是正確的嗎? –

+0

半是/否。我的意思是從「第二次點擊」再次重複策略 - 從文本視圖傳遞文本再次編輯文本。但沒有軟鍵盤和指針。由於TextView用於顯示文本,因此可以使用 –