2017-12-05 9 views
1

단추를 사용하여 사용자 정의 키보드를 만들었습니다. 나는 안드로이드의 키보드가 터지면서 화면 절반을 차지하는데 지쳤다. 내 키보드 은 활동 레이아웃의 일부입니다. 2 EditTexts 안드로이드 키보드 팝업을 방지하고 EditTexts를 읽기 전용으로 만들기 위해 포커스를 설정할 수 없습니다. 내 키보드에서 버튼을 선택하면 단추 텍스트의 값이 집중된 것으로 지정된 EditText 필드에 표시됩니다 (onTouch를 사용하고 플래그/부울 값 설정). 플래그 mIsNameSelected = true이면 EditText라는 이름이 포커스로 간주됩니다. 그렇지 않으면 전자 메일 EditText가 포커스가있는 것으로 간주됩니다. 여기 내 딜레마가있다.링크가 아닌 EditText .....의 밑줄/스타일을 변경하고 텍스트를 가로로 스크롤하십시오.

이 구현의 첫 번째 부작용은 내 텍스트가 EditText 필드에 할당 된 공간보다 길면 텍스트가 오른쪽으로 사라집니다. EditText가 정상적으로 작동하는 것처럼 시작 부분을 줄임표로 바꾸고 싶습니다. 그러나 이것을 isFocusable(false)으로 설정하면이 작업을 수행 할 수있는 기능이 없어졌습니다. 해결 방법이 있습니까?

둘째, 사용자가 EditText 중 하나를 선택했다는 시각적 신호를 추가하려면 텍스트 링크가 아닌 EditText에서 밑줄의 색을 변경하고 싶습니다. 포커스가 설정되지 않는 속성 설정 때문에 텍스트 링크가 표시되지 않습니다. 프로그래밍 방식으로 EditText의 스타일을 변경하는 방법이 있어야한다는 것을 알고 있습니다. 이것이 제가 찾고있는 것입니다.

enter image description here

버튼은 XML

type() 메소드를 호출하고 여기서 중요한 방법이다 (타입()가 XML로 불린다) :

public void setActivteListener(final EditText et) { 
     et.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int result = event.getAction(); 
       if (result == MotionEvent.ACTION_DOWN) { 
        if (et.getId() == R.id.et_customer_name) { 
         Log.d(TAG, "here on customer name"); 
         mIsNameSelected = true; 
         updateUI(); 
        } else if (et.getId() == R.id.et_customer_email) { 
         Log.d(TAG, "here on customer email"); 
         mIsNameSelected = false; 
         updateUI(); 
        } 
       } 
       return true; 
      } 
     }); 
    } 

    public void type(View view) { 

     Log.d(TAG, "type method called"); 

     Button btn = (Button) view; 
     String txt = btn.getText().toString(); 
     char value = txt.charAt(0); 

     if (mIsNameSelected) { 


      if (mCustomerName.getText().length() > 0) { 

       if (txt.equalsIgnoreCase("back")) { 

        char[] text = mCustomerName.getText().toString().toCharArray(); 
        char[] temp = Arrays.copyOfRange(text, 0, text.length - 1); 
        mCustomerName.setText(String.valueOf(temp)); 
       } 
      } 

      if (txt.equalsIgnoreCase("space")) { 
       char[] text = mCustomerName.getText().toString().toCharArray(); 

       Log.d(TAG, "the value of text now : " + String.valueOf(text)); 

       char[] temp = Arrays.copyOf(text, text.length + 1); 

       Log.d(TAG, "the value of temp now: " + String.valueOf(temp)); 

       temp[temp.length - 1] = ' '; 

       Log.d(TAG, "temp to string: " + String.valueOf(temp)); 

       mCustomerName.setText(String.valueOf(temp)); 
      } 

      if (!(txt.equalsIgnoreCase("back") || txt.equalsIgnoreCase("space"))) { 
       char[] text = mCustomerName.getText().toString().toCharArray(); 
       char[] temp = Arrays.copyOf(text, text.length + 1); 
       temp[temp.length - 1] = value; 
       mCustomerName.setText(String.valueOf(temp)); 
      } 

     } else { 
      Log.d(TAG, "the length of the et field is : " + mCustomerName.getText().length()); 

      if (mCustomerEmail.getText().length() > 0) { 

       Log.d(TAG, "the text is longer than 0"); 

       if (txt.equalsIgnoreCase("back")) { 

        Log.d(TAG, "the text = back "); 

        char[] text = mCustomerEmail.getText().toString().toCharArray(); 
        char[] temp = Arrays.copyOfRange(text, 0, text.length - 1); 
        mCustomerEmail.setText(String.valueOf(temp)); 
       } 
      } 

      if (txt.equalsIgnoreCase("space")) { 
       char[] text = mCustomerEmail.getText().toString().toCharArray(); 

       Log.d(TAG, "the value of text now : " + String.valueOf(text)); 

       char[] temp = Arrays.copyOf(text, text.length + 1); 

       Log.d(TAG, "the value of temp now: " + String.valueOf(temp)); 

       temp[temp.length - 1] = ' '; 

       Log.d(TAG, "temp to string: " + String.valueOf(temp)); 

       mCustomerEmail.setText(String.valueOf(temp)); 
      } 

      if (!(txt.equalsIgnoreCase("back") || txt.equalsIgnoreCase("space"))) { 
       char[] text = mCustomerEmail.getText().toString().toCharArray(); 
       char[] temp = Arrays.copyOf(text, text.length + 1); 
       temp[temp.length - 1] = value; 
       mCustomerEmail.setText(String.valueOf(temp)); 
      } 

     } 
    } 
여기

은 도면

답변

0

세트

android:windowSoftInputMode="stateAlwaysHidden" 
012 귀하의 매니 페스트 활동 xml에있는

키보드가 터지지 않아도 초점을 맞출 수 있습니다.

https://developer.android.com/guide/topics/manifest/activity-element.html

+0

멋지다. 나는 그것을 시도했다. 내가 배울 필요가있는 많은 XML 속성이 있습니다. 나는 'stateHidden'을 사용하고 있었고 'stateAlwaysHidden'이 있다는 것을 깨닫지 못했습니다. 이 게시물을 가로 질러와 비슷한 상황에서 자신을 발견 누구나 @ 토마스 스티븐스에 의해 주어진 솔루션을 사용하고 mCustomerName.setPosition (temp.length) 형식() 메서드 끝에 커서를 추가 할 추가되었습니다. 고마워. – Patric