2013-07-17 12 views
8

Wie kann ich den Cursor eines EditText nur anzeigen, wenn die Tastatur angezeigt wird. Im Moment blinkt der Cursor auch wenn der EditText nicht aktiv ist und die Tastatur ausgeblendet ist, was wirklich nervt. DieseAndroid: Nur Cursor im Editiertext anzeigen, wenn Tastatur angezeigt wird

ist, wie mein Layout aussieht:

<?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> 

Danke, Solidus

+0

möglich Duplikat von [ entferne den Cursor von editText] (http: // sta ckoverflow.com/questions/13029917/remove-cursor-from-edittext) – codeMagic

Antwort

0

ich mehrere Optionen ausprobiert und nur eine richtig funktioniert. Vielleicht gibt es einen sauberen Weg, es zu tun, aber das ist für mich:

-Code

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); 
        } 
       } 
      } 
     }); 
    } 
} 

Einzelheiten

Die Idee ist es, ein ViewTreeObserver zu verwenden, um zu erkennen, wenn Die activityRoot (ID des Root-Layouts Ihrer Aktivität) ist durch etwas versteckt (Vergleich der tatsächlichen Höhe mit der Anfangshöhe des Layouts), wahrscheinlich die Tastatur.

Ich fand die Lösung mit this question.

Ich hoffe, dieser Code wird jemandem helfen.

-3

hinzufügen

android:cursorVisible="false" 

in EditText

+0

Bitte Kommentar hinzufügen, warum Sie nicht hilfreich finden – Rahul

+1

Einstellung cursorVisible zu false wird immer den Cursor ausblenden, auch wenn der EditText Fokus hat. Stattdessen möchten wir den Cursor anzeigen lassen, wenn der Fokus vorhanden ist, und ihn ausblenden, wenn kein Fokus vorhanden ist –

1

1) Stellen Sie in Ihrem xml unter Ihrem EditText:

android:cursorVisible="false" 

2) Set OnClickListener:

iEditText.setOnClickListener(editTextClickListener); 

OnClickListener editTextClickListener = new OnClickListener() 

{ 

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

    } 
}; 
Verwandte Themen