34

EditText伝統的なモンゴル語の​​縦型を作っています。EditText回転した の内部にわずかに変更された を埋め込むことで、正常に実装できましたViewGroup。システム 1 は縦書きテキストをサポートしておらず、回転しても回転しないため、完全にカスタムのコンテキスト メニューを作成する必要がありますViewGroup。そのため、システム コンテキスト メニューを完全に無効にしたいと考えています。

これは、コピー/貼り付けなどを無効にしようとしているこれらの質問とは異なることに注意してください。

シミュレーターにはコンテキスト メニューが表示されませんが、Android 5.0.2 Xiaomi フォンには表示されます。

私が試してみました:

私はハッキングに対してオープンですが、デバイス間で一貫して動作する必要があります. Mark Murphy (Commons Guy)は、似たようなことをしようとしている別のユーザーへの返信として、次のように書いています。

答えを思いついたとしても、デバイスを超えて機能しないのではないかと思います。デバイス メーカーは、EditText 用に独自の「コンテキスト メニュー」を展開する傾向があり、そのコンテキスト メニューに項目を追加しようとする開発者の試みを無効にしています。そのコンテキスト メニューをブロックしようとすると、同様の結果になると思います。

私は運が悪いのでしょうか?

今考えられる唯一のことは、完全に書き直しTextViewEditTextゼロから作成することです (まあ、Android ソースを変更することによって)。私は似たようなことをした人を知っていますが、彼のコードはオープンソースではありません。この大きな一歩を踏み出す前に、Stack Overflow でもっと簡単な解決策を探してみたいと思います。

更新:過去 2 日間、ソース コードを変更しようとしてきましたがTextView、6 か月のプロジェクトのようです。相互に関連するクラスの塊です。別の解決策が必要ですが、アイデアがありません。

MVCE

これは、問題を再現するために私が考えることができる最も簡単な方法です。私の習慣から必要なものは何もありませんEditText。レイアウトはEditText、デフォルト プロジェクトの Hello World のTextView. 非推奨のメソッドを処理しないように、最小 API を 11 に変更しました。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText editText = (EditText) findViewById(R.id.edit_text);
        editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { return false; }
            @Override
            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; }
            @Override
            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; }
            @Override
            public void onDestroyActionMode(ActionMode actionMode) { }
        });
    }
}

シミュレーター (API 24 を実行) のコンテキスト メニューは、カーソル ハンドルをクリックすると表示されます (ロング クリックまたはダブル クリックでは表示されません)。ここに画像があります:

ここに画像の説明を入力

Android 5.0 を実行している Xiaomi MIUI 電話では、すべての状況 (カーソル ハンドルのクリック、長押し、ダブルクリック) でコンテキスト メニューが表示されます。

アップデート

Aritra Roy のソリューションは、シミュレーター、彼がテストした他のデバイス、および私のデバイスで動作しています。元の問題が解決されるため、彼の回答を受け入れました。唯一のマイナス面は、テキスト選択も無効になることです。

4

7 に答える 7

4

私はこのコードを 用EditTextに作成しましたが、このような問題に対してはうまくいきました。

try {
    edtName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            edtName.setSelection(0);
        }
    });
    edtName.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            return true;
        }
    });
    edtName.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { return false; }
        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; }
        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; }
        @Override
        public void onDestroyActionMode(ActionMode actionMode) { }
    });
} catch (Exception e) {
    e.printStackTrace();
}
于 2017-01-23T05:35:14.873 に答える