2016-12-16 77 views
0

我想一个很简单的用户界面,有一个EditTextImageView。当我点击EditText时,我想接受来自用户的输入。现在,当我点击ImageView(键盘仍然打开时)时,我想禁用EditText并同时阻止软键盘关闭。但是setEnabled(false)会自动关闭软键盘。Android的 - 防止Softkeyboard从EditText上后,关闭已被禁用

这里是我的胡亚蓉:

public class SecondActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     final EditText editText = (EditText) findViewById(R.id.edit_text); 
     final ImageView imageView = (ImageView) findViewById(R.id.image_view); 
     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       editText.setEnabled(false); 
      } 
     }); 
    } 
} 

这里是UI:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.pearson.android.test.stackoverflow_efficient_data_construction_recyclerview.SecondActivity" 
    tools:showIn="@layout/activity_second"> 

    <EditText 
     android:id="@+id/edit_text" 
     android:layout_width="300dp" 
     android:layout_height="wrap_content" /> 

    <ImageView 
     android:id="@+id/image_view" 
     android:layout_alignParentRight="true" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:background="@android:color/holo_red_dark"/> 

</RelativeLayout> 

我试图保持softkeyboard打开,像这样:

InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

,但有一个很明显的闪烁(好像旧的键盘关闭并被新的键盘取代)。

我也试过没有禁用的EditText(我不应该能够输入点击图片后的任何文本),并试图操纵focasability代替,但没有成功。

任何方向或解决方案将不胜感激。

+0

你为什么要保留的软键盘打开,即使用户不应该能够输入到它?这是糟糕的设计,用户不知道发生了什么。 –

回答

0

试试这个代码隐藏按键板

imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       hideKeyboard(getContext()); 
      } 
     }); 
public static void hideKeyboard(Context ctx) { 
      InputMethodManager inputManager = (InputMethodManager) ctx 
        .getSystemService(Context.INPUT_METHOD_SERVICE); 
      View v = ((Activity) ctx).getCurrentFocus(); 
      if (v == null) 
       return; 

      inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 
     } 
+0

我不想隐藏键盘,我想要做的完全相反,保持甚至禁用的EditText – user1841702

+0

InputMethodManager IMM =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)后打开; imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); – prsandroid

+0

尝试按钮点击上面的代码 – prsandroid