簡體   English   中英

Android EditText字段像按鈕

[英]Android EditText field like button

我正在嘗試處理一件小事情。 在我的應用程序中,我有一個帶有兩個EditText字段的活動。

我希望其中一個是標准字段(etNormal),而另一個(etButton)的行為更像是按鈕,因此當您觸摸它時,不會顯示鍵盤,而是打開了滑動抽屜。 如果滑動抽屜被打開,您將按普通的edittext滑動抽屜將隱藏。

我曾嘗試將條件為如果單擊/觸摸了etButton打開滑動抽屜,則將OnClickListenerOnTouchListener (不在同一嘗試中)添加到這兩個條件中(如果沒有,則關閉)。

結果很奇怪。 在進行OnTouchListener測試時,它更像是切換,因此當我按下一個抽屜時打開另一個抽屜。 談到OnClickListener時,我需要按兩次edtitext才能完成操作。

為了在etButton中隱藏鍵盤,我正在使用setInputType(InputType.TYPE_NULL); 我也嘗試過setEnabled(false); 但是后來我什至無法點擊/觸摸它。 當前使用的方法的一個缺陷是,當我將單擊從etNormal更改為etButton時,鍵盤仍然顯示,並且沒有隱藏。

那么,誰能告訴我我可以做些什么來實現自己的目標?

編輯:

我已經刪除了您當前的建議,並修改了一些代碼,但仍然無法正常工作。

這是我分配OnTouchListener的一部分:

OnTouchListener touchListener = new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent ev) {
                if(v==etButton && ev.getAction()==MotionEvent.ACTION_DOWN) {
                    slidingDrawer.animateOpen();
                }else {
                    slidingDrawer.animateClose();
                }
                return false;
            }
        };

        etNormal1.setOnTouchListener(touchListener);
        etNormal2.setOnTouchListener(touchListener);
        etButton.setOnTouchListener(touchListener);

同樣在XML布局文件的etButton聲明中,我有:

android:focusable="false"

但是現在,在etButton上沒有碰到任何事情(如果打開了滑動抽屜,則只有其隱藏),並且在觸摸etNormal1或2時,滑動抽屜會顯示或隱藏,這取決於首先發生的事情(換句話說就是toggel)。

任何想法,這是怎么了?

得到了一個editText與

android:focusable="false"
android:clickable="true"

然后使用OnClickListener覆蓋操作

在您的布局中,將以下屬性添加到EditText

android:focusable="false"
android:focusableInTouchMode="false"

接下來,編寫方法來處理對EditText的單擊,並添加您的應用程序邏輯。

除了以上答案外,我還使用cursorVisibility隱藏了光標!

android:focusable="false"
android:clickable="true"
android:cursorVisible="false"
android:focusableInTouchMode="false"

cursorVisible在單擊EditText時顯示/隱藏光標

focusable在用戶觸摸視圖時獲得焦點,例如EditText

focusableInTouchMode保持選擇視圖。 (選擇和點擊是不同的)

如需詳細了解,請參閱此處

如果您使用的是onTouch事件,則單擊編輯文本時,將獲得兩個事件,其動作分別為MotionEvent.Action_down和action Up。 因此基本上,它會產生兩次單擊編輯文本的效果。 您能否提供代碼,以便我們深入了解。

將您的代碼重新寫入為:

OnTouchListener touchListener = new OnTouchListener() {

        boolean isOpen=false;

        @Override
        public boolean onTouch(View v, MotionEvent ev) {
            if(v==etButton && ev.getAction()==MotionEvent.ACTION_UP) {
               if(!isOpen){
                slidingDrawer.animateOpen();
                }else{
                slidingDrawer.animateClose();
                }
                isOpen=!isOpen;
            }
            return false;
        }
    };

如果etButton需要是一個EditText(為什么不是按鈕,如果它的行為像一個按鈕?),則可以設置onFocusChangeListener。 一旦獲得焦點,就可以顯示抽屜...?

不確定是否不顯示鍵盤...

EditTexts非常棘手。 使用OnClickListener時必須按兩次的原因是,第一次在EditText上獲得焦點,並且消耗了touch事件,在這種情況下會觸發OnFocusListener。 當您第二次觸摸時,EditText已經具有焦點,因此現在觸發了單擊事件。

我建議您嘗試在沒有EditTexts的情況下執行此操作。 無論如何,這將產生一個更清潔,更簡單的解決方案。 您為什么要使用EditTexts而不是Buttons?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM