2

Android の EditText に問題があります。通常、ユーザーが EditText を長押しするかダブルタップすると、カーソルがある単語が強調表示され、EditText の Contextual Actionbar (CAB) がポップアップします (Android 3.0 以降)。

私の EditText は実際に最近までこれを行っていました。問題は、EditText を長押しすると、選択した単語が「ピックアップ」されることです。つまり、単語の拡大された「ゴースト」イメージがピックアップされ、ドラッグ アンド ドロップできます。それが挿入されたテキスト内の他の場所にあります。EditText のコードにはまったく触れていません。Google Chrome (デスクトップ バージョン) を実行している人なら誰でも、テキストを強調表示してカーソルでドラッグすると、このような動作を確認できます。

この問題は、私のデバイスが最近 Android 4.2.2 にアップグレードされたことが原因である可能性があります。Google で情報を探しましたが、何も見つかりませんでした。また、単語をダブルタップしても期待どおりに CAB が表示されません。1 秒間点滅してから消えますが、これは関連する問題ではないと思います。

アプリは CAB なしでは機能しないため、この動作を停止する必要があります。問題は、「通常の」動作に戻すにはどうすればよいかということです。すべての動作は、Android 4.2.2 を実行している Nexus 4 で確認されています。すべての助けに感謝します。どうもありがとうございます!

EditText の XML レイアウト コード:

<EditText
      android:id="@+id/editor_mainText"
      android:layout_width="40dp"
      android:layout_height="40dp"
      android:layout_above="@+id/options_bottom"
      android:layout_alignParentLeft="true"
      android:layout_alignParentRight="true"
      android:layout_below="@+id/options_top"
      android:background="#FFE7E7E7"
      android:imeOptions="flagNoExtractUi"
      android:inputType="textMultiLine|textNoSuggestions|textVisiblePassword"
      android:padding="8dp"
      android:scrollbars="none"
      android:textCursorDrawable="@null"
      android:textSize="17sp"
      android:typeface="monospace" >

            <requestFocus />
     </EditText>
4

2 に答える 2

0

注:私の最初の答えは少し間違っていました。コードのうっかりミスに気付かなかったのですが、わかったので、これが機能しなかった理由です

私はそれを解決しましたが、なぜこの動作が最初に起こったのか、そして次のことを行うことで違いが生じた理由を完全に説明することはできません. とにかく、そうでした。

EditText は、Scroller と VelocityTracker を使用して「フリング可能」にするために拡張されていました。これには、onTouchEvent(MotionEvent) のオーバーライドが含まれていました。しかし、コードに小さな誤りがあり、super.onTouchEvent(MotionEvent) が 2 回呼び出されていました。MotionEvent.ACTION_MOVE イベント中を除き、switch-case のステートメント。このエラーが発生しても、Android 4.2.1 までアプリは問題なく動作しました。Android 4.2.2 のアップグレード後のコードには触れていませんでしたが、何らかの理由で、Android の新しいバージョンでは、この小さなエラーがこの奇妙な動作を引き起こしました。

つまり、基本的に、これは非常に基本的な間違いであり、今では次のことを学びました: switch-case では、必ず break ステートメントでケースを閉じてください!

于 2013-03-24T00:33:10.437 に答える
0

私はほぼ同じ行動に直面しました。スタックオーバーフローに関する関連する質問が見つからないため、ここに回答を掲載します。多分それは誰かのために役立つでしょう。したがって、コピー/貼り付けポップアップを閉じた後 (画面上の任意の場所をクリックして)、同じテキストを再度選択できない (代わりに「ゴースト」を取得する) という問題に直面した場合は、手動でtextIsSelectable属性を無効にしてから再度有効にするだけです。オンビュー。そのために、ActivityMain でこのコードを使用しました。悪い解決策ですが、私にとってはうまくいきました

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    if (ev?.action == MotionEvent.ACTION_DOWN) {
        val v = currentFocus
        if (v is TextView || v is TextInputEditText) {
            val outRect = Rect()
            v.getGlobalVisibleRect(outRect)
            if (!outRect.contains(ev.rawX.toInt(), ev.rawY.toInt())) {
                val view = when (v) {
                    is TextView -> v
                    is TextInputEditText -> v
                    else -> null
                }
                view?.setTextIsSelectable(false)
                view?.refreshDrawableState()
                view?.setTextIsSelectable(true)
            }
        }
    }
    return super.dispatchTouchEvent(ev)
}
于 2020-12-18T15:41:04.473 に答える