【问题标题】:Change the behaviour of "imeOptions" (Android)更改“imeOptions”的行为(Android)
【发布时间】:2016-05-26 03:30:06
【问题描述】:

这是我现在的问题,伙计们。

我有下一个TextView和EditText

activity_profile.xml

<TextView
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:layout_marginRight="@dimen/activity_horizontal_margin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/done"
            android:id="@+id/done_profile_btn"
            android:textColor="@color/white"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />
<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:id="@+id/input_profile_swift"
            android:hint="@string/swift"
            android:inputType="textCapCharacters"
            android:textColor="@color/colorPrimaryDark"
            android:layout_marginBottom="22dp"
            android:maxLines="1"
            android:imeOptions="actionDone"/>

我想更改按下键盘上的“完成”按钮对 EditText 所做的操作,以便与 TextView 执行相同的操作,后者将执行以下操作:

ProfileActivity.java

done_btn = (TextView) findViewById(R.id.done_profile_btn);
swift = (EditText)findViewById(R.id.input_profile_swift);
done_btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                //saveChanges();
                //finish();
                Toast.makeText(getApplicationContext(), "Your changes have been saved", Toast.LENGTH_SHORT).show();
            }
        });
...

所以...我希望两者(按键盘上的“完成”并按 TextView)做同样的事情。

知道怎么做吗?非常感谢。

【问题讨论】:

    标签: java android android-edittext textview imeoptions


    【解决方案1】:

    试试这个

    EditText swift = (EditText)findViewById(R.id.input_profile_swift);
    swift.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                Toast.makeText(getApplicationContext(), "Your changes have been saved", Toast.LENGTH_SHORT).show();
            }
    
        }
    });
    

    您必须实现 OnEditorActionListener 接口并将其设置为您的 EditText。使用 setOnEditorActionListener(OnEditorActionListener 实现。)

    【讨论】:

      【解决方案2】:

      使用 TextView.OnEditorActionListener。

      @Override
      public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
          KeyboardHelper.hideSoftKeyboard(getActivity());
          doSomeWoorrkThatYouNeed();
          return true;
      }
      

      【讨论】:

        【解决方案3】:

        您也可以使用这个(设置在 EditText 上执行操作时调用的特殊侦听器),它适用于 DONE 和 RETURN:

        swift.setOnEditorActionListener(new OnEditorActionListener() {
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
                      //saveChanges();
                      //finish();
                      Toast.makeText(getApplicationContext(), "Your changes have been saved", Toast.LENGTH_SHORT).show();
                    }    
                    return false;
                }
            });
        

        希望对您有所帮助!

        【讨论】:

          【解决方案4】:

          您应该将此 android:clickable="true" 添加到您的 xml 中以获取 TextView。 你也可以在EditText 上使用setOnEditorActionListener 设置一个EditorActionListener,就像你为TextView 使用setOnClickListener 所做的那样。

          【讨论】:

            猜你喜欢
            • 2013-07-04
            • 1970-01-01
            • 1970-01-01
            • 2013-11-14
            • 2019-01-14
            • 1970-01-01
            • 2015-02-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多