2013-02-04 18 views
9

Mam AutoCompleteTextView, która jak zwykle podaje sugestie po wpisaniu przez użytkownika 3 liter. Chcę raz dotknąć listy sugestii, aby ukryć miękką klawiaturę. Co zrobiłem poniżej z układem tabeli, ukrywa klawiaturę tylko wtedy, gdy klikniesz w dowolnym miejscu oprócz listy sugestii.Android: AutoCompleteTextView ukryj miękką klawiaturę

XML

  <TableRow 
      android:id="@+id/tableRow2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" > 

      <AutoCompleteTextView 
       android:id="@+id/auto_insert_meds" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:ems="15" 
       android:inputType="textVisiblePassword|textMultiLine" 
       android:scrollHorizontally="false" 
       android:text="" 
       android:textSize="16sp" /> 
     </TableRow> 

Java

TableLayout tbl = (TableLayout) findViewById(R.id.main_table); 
    tbl.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      in.hideSoftInputFromWindow(v.getWindowToken(), 0); 
      return true; 
     } 
    }); 

XML dla niestandardowej listy

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/medlist_linear_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

     <TextView 
     android:id="@+id/med_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:scrollHorizontally="false" 
     android:padding="3dp" 
     android:textColor="@android:color/white" /> 

</LinearLayout> 
+0

Zachowanie chcesz wymusić nie jest to, co użytkownik może oczekiwać. Zły interfejs użytkownika ... –

+0

Nie, nie jest, użytkownik kliknął żądany element.Nie ma potrzeby, aby klawiatura była widoczna. – Denny

Odpowiedz

15

Korzystanie OnItemClickListener. Nadzieję, że to działa :)

AutoCompleteTextView text = (AutoCompleteTextView) findViewById(R.id.auto_insert_meds); 

text.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    in.hideSoftInputFromWindow(arg1.getWindowToken(), 0); 

    } 

}); 
+2

Zaimplementowałem OnItemClickListener w AutoCompleteTextView, ale działa to tylko wtedy, gdy kliknę "na liście", aby wybrać wartość, a nie kiedy ją "dotknę", aby ją przewinąć. – ChrisGeo

+0

dlaczego to jest zaakceptowana odpowiedź? noxo wydaje się, że to dobrze. – JonnyBoy

+10

Po prostu użyj ... in.hideSoftInputFromWindow (arg1.getApplicationWindowToken(), 0); W miejsce .. in.hideSoftInputFromWindow (arg1.getWindowToken(), 0); Będzie ona działać ... :) –

7

wysokość 1) Zmień AutoCompleteTextView rozwijana do MATCH_PARENT

setDropDownHeight(LinearLayout.LayoutParams.MATCH_PARENT); 

2) oddalił klawiatury ekranowej nadrzędnymi getView() z AutoCompleteTextView adaptera

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = super.getView(position, convertView, parent); 
    v.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       InputMethodManager imm = (InputMethodManager) getActivity() 
         .getSystemService(
           Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(
         typeTextView.getWindowToken(), 0); 
      } 

      return false; 
     } 
    }); 

    return v; 
} 
+0

Nie działa to rozwiązanie dla mnie ... – delive

+0

Po prostu użyj ... imm.hideSoftInputFromWindow (typeTextView.getApplicationWindowToken(), 0); W miejsce .. imm.hideSoftInputFromWindow (typeTextView.getWindowToken(), 0); To zadziała ... :) –

2

W przypadku tego pomaga każdemu, miałem podobną sytuację.

My AutoCompleteTextView została wyświetlona na DialogFragment bez tytułu Bar ponieważ użyłem getWindow().requestFeature(Window.FEATURE_NO_TITLE); w onCreateDialog()

I dodaje następujący wiersz po FEATURE_NO_TITLE oraz listę wyników wyświetlanych na klawiaturze:

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialogo=super.onCreateDialog(savedInstanceState); 
     dialogo.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     dialogo.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
     return dialogo; 
    } 
5

uznał ten fragment kodu w podobnym wątku. Nadzieję, że to pomaga:

private void hideKeyboard() { 
     // Check if no view has focus: 
     View view = this.getCurrentFocus(); 
     if (view != null) { 
      InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
} 

Link do oryginalnego postu. Zauważ, że nie jest to zaakceptowana odpowiedź.

-1

Spróbuj tego chłopaki .. To zadziała .. !!!

AutoCompleteTextView auto_text = (AutoCompleteTextView)findViewById(R.id.auto_insert_meds); 

auto_text.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
{ 
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

    in.hideSoftInputFromWindow(arg1.getApplicationWindowToken(), 0); 

} }); 
13

Jak Chakri Reddy Sugerowana:

To działa dla mnie po prostu zastąpić

to:

in.hideSoftInputFromWindow (arg1.getWindowToken(), 0);

z:

in.hideSoftInputFromWindow (arg1.getApplicationWindowToken() 0);

+1

Dobrze .. To działa :) –

+0

Dziękuję @ Chakri –

1
AutoCompleteTextView autoText= (AutoCompleteTextView) findViewById(R.id.auto_insert_meds); 

autoText.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    View view = this.getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

    } 
    } 
}); 
Powiązane problemy