2013-07-17 24 views
8

come posso mostrare il cursore di un EditText solo quando viene visualizzata la tastiera. Al momento il cursore lampeggia anche se EditText non è attivo e la tastiera è nascosta, il che è davvero fastidioso.Android: mostra solo il cursore in edittext quando viene visualizzata la tastiera

Questo è il modo in mio layout appare:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/activity_main_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" > 

    <ImageButton 
     android:id="@+id/activity_main_add_button" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:background="@drawable/button" 
     android:contentDescription="@string/desc_add" 
     android:onClick="addGame" 
     android:src="@android:drawable/ic_input_add" 
     android:tint="@color/gray" /> 

    <View 
     android:id="@+id/stub1" 
     android:layout_width="2dp" 
     android:layout_height="40dp" 
     android:layout_toRightOf="@id/activity_main_add_button" 
     android:background="@color/light_gray" /> 

    <ImageButton 
     android:id="@+id/activity_main_menu_button" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_toRightOf="@id/stub1" 
     android:background="@drawable/button" 
     android:contentDescription="@string/desc_add" 
     android:onClick="showMenu" 
     android:scaleType="fitXY" 
     android:src="@drawable/square_button" 
     android:tint="@color/gray" /> 

    <View 
     android:id="@+id/stub2" 
     android:layout_width="2dp" 
     android:layout_height="40dp" 
     android:layout_toRightOf="@id/menu_button" 
     android:background="@color/light_gray" /> 

    <EditText 
     android:id="@+id/activity_main_search" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_toRightOf="@id/stub2" 
     android:background="@drawable/default_background" 
     android:gravity="center" 
     android:hint="@string/search_game" 
     android:inputType="text" 
     android:textColor="@color/black" 
     android:textSize="20sp" 
     android:textStyle="bold" /> 

    <ListView 
     android:id="@+id/activity_main_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/activity_main_add_button" 
     android:layout_margin="10dp" 
     android:divider="@color/white" 
     android:dividerHeight="10dp" > 
    </ListView> 

</RelativeLayout> 

Grazie, Solidus

+0

possibile duplicato di [ rimuovi il cursore da editText] (http: // sta ckoverflow.com/questions/13029917/remove-cursor-from-edittext) – codeMagic

risposta

0

ho provato più opzioni e una sola funziona correttamente. può essere c'è un modo più pulito per farlo, ma questo ha funzionato per me:

Codice

public class MainActivity extends Activity { 
    EditText edit = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     edit = (EditText) findViewById(R.id.edit); 

     final View activityRootView = findViewById(R.id.activityRoot); 
     activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       Rect r = new Rect(); 
       activityRootView.getWindowVisibleDisplayFrame(r); 
       int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); 
       if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
        if (edit != null) { 
         edit.setCursorVisible(true); 
        } 
       } else { 
        if (edit != null) { 
         edit.setCursorVisible(false); 
        } 
       } 
      } 
     }); 
    } 
} 

dettagli

L'idea è quella di utilizzare un ViewTreeObserver al fine di rilevare quando lo activityRoot (id del layout root della tua attività) è nascosto da qualcosa (confrontando l'altezza effettiva con l'altezza iniziale del layout), probabilmente la tastiera.

Ho trovato la soluzione utilizzando this question.

Spero che questo codice possa aiutare qualcuno.

-3

aggiungere

android:cursorVisible="false" 

in EditText

+0

per favore aggiungi un commento perché non è utile il parametro di impostazione – Rahul

+1

cursoreVisibile su false nasconderà sempre il cursore, anche se il testo EditText è attivo. al contrario, vogliamo che il cursore mostri quando è attivo ma si nasconde quando non c'è il focus –

1

1) Impostare in XML sotto l'EditText:

android:cursorVisible="false" 

2) Impostare onClickListener:

iEditText.setOnClickListener(editTextClickListener); 

OnClickListener editTextClickListener = new OnClickListener() 

{ 

    public void onClick(View v) 
    { 
     if (v.getId() == iEditText.getId()) 
     { 
      iEditText.setCursorVisible(true); 
     } 

    } 
}; 
Problemi correlati