欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?中的監(jiān)聽(tīng)和按鍵處理詳情

 更新時(shí)間:2022年08月18日 10:30:07   作者:奔跑吧雞翅  
這篇文章主要介紹了Android?中的監(jiān)聽(tīng)和按鍵處理詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

各種監(jiān)聽(tīng)

我們來(lái)練習(xí)下各種監(jiān)聽(tīng)。我們?cè)?TextView 上添加了觸摸監(jiān)聽(tīng),在 Button 上添加了長(zhǎng)按監(jiān)聽(tīng),在 Spinner 下拉框選項(xiàng)發(fā)生變化的時(shí)候添加了監(jiān)聽(tīng),在 ListView 選中選項(xiàng)時(shí)增加了監(jiān)聽(tīng)。

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#F08080"
        android:padding="10dp"
        android:text="觸屏監(jiān)聽(tīng)" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:elevation="1dp"
        android:text="長(zhǎng)按監(jiān)聽(tīng)" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#EED2EE"
        android:padding="20dp" />

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#D1EEEE" />
</LinearLayout>

Activity

public class MainActivity extends AppCompatActivity {
    private TextView textview;
    private Button button;
    private Spinner spinner;
    private ListView listview;
    private String[] cities;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setData();//準(zhǔn)備要在列表中要顯示的數(shù)據(jù)
        setViews();//獲得控件,并在列表中顯示數(shù)據(jù)
        setListeners();//為控件設(shè)置監(jiān)聽(tīng)器
    }

    private void setData() {
        cities = new String[]{"北京", "天津", "河北",
                "黑龍江", "吉林", "遼寧", "內(nèi)蒙古",
                "新疆", "西藏", "江蘇", "上海"
        };
    }

    private void setViews() {
        textview = findViewById(R.id.textView);
        button = findViewById(R.id.button);
        spinner = findViewById(R.id.spinner);
        listview = findViewById(R.id.listview);

        //列表和下拉菜單顯示城市列表
        //一段神秘的代碼...
        ArrayAdapter<String> adapter = null;
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, cities);
        listview.setAdapter(adapter);

        adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, cities);
        adapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
        spinner.setAdapter(adapter);
    }

    private void setListeners() {
        textview.setOnTouchListener((view, motionEvent) -> {
            switch (motionEvent.getAction()) {
                //按下
                case MotionEvent.ACTION_DOWN:
                    Toast.makeText(MainActivity.this, "按下", Toast.LENGTH_SHORT).show();
                    break;
                //抬起
                case MotionEvent.ACTION_UP:
                    Toast.makeText(MainActivity.this, "抬起", Toast.LENGTH_SHORT).show();
                    break;
                //移動(dòng)
                case MotionEvent.ACTION_MOVE:
                    //Toast.makeText(MainActivity.this, "移動(dòng)", Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        });

        button.setOnLongClickListener(view -> {
            Toast.makeText(MainActivity.this, "長(zhǎng)按了按鈕", Toast.LENGTH_SHORT).show();
            //返回布爾值true
            return true;
        });


        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, "下標(biāo)" + i + "城市" + cities[i], Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });

        listview.setOnItemClickListener((adapterView, view, i, l) -> Toast.makeText(MainActivity.this, "下標(biāo)" + i + "城市" + cities[i], Toast.LENGTH_SHORT).show());
    }
}

按鍵處理

onKeyDown()

按鍵處理表現(xiàn)為使用 Android 設(shè)備時(shí)操作的物理按鈕的響應(yīng)的處理。

重寫 onKey??() 方法可以處理按鈕的事件,該系列方法的參數(shù) int keyCode 表示按下的哪個(gè)鍵,可以匹配 keyEvent 類中的常量進(jìn)行對(duì)比。

我們可以捕獲 Back 鍵。原理是:當(dāng)按下 BACK 鍵時(shí),會(huì)被onKeyDown捕獲,判斷是 BACK 鍵,則執(zhí)行相應(yīng)方法。

新建一個(gè)測(cè)試項(xiàng)目,在 MainActivity 中增加如下代碼:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //日志
        Log.d("ONKEYDOWN", "keyCode:" + keyCode);
        //判斷其按下的是否為返回鍵(Back)
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Toast.makeText(this, "連按2下退出應(yīng)用程序", Toast.LENGTH_SHORT).show();
        }
        //按照默認(rèn)方式處理
        return super.onKeyDown(keyCode, event);
    }

運(yùn)行程序:

可以看到按下返回鍵時(shí),退出了程序,同時(shí)輸出日志

ONKEYDOWN: keyCode:4

由于最后執(zhí)行了return super.onKeyDown(keyCode, event);,所以按照默認(rèn)方式退出了

如果改為return false; 或 return true; 都不會(huì)退出程序。

栗子:連按2次退出應(yīng)用程序的代碼

public class MainActivity extends AppCompatActivity {
    private long lastBackDownTime;

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

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //日志
        Log.d("ONKEYDOWN", "keyCode:" + keyCode);
        //判斷其按下的是否為返回鍵(Back)
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //獲取當(dāng)前按下Back鍵的時(shí)間
            long currentBackDownTime = System.currentTimeMillis();
            //與上一次按下Back鍵的時(shí)間對(duì)比
            //如果時(shí)間差不超過(guò)1000ms,判定為連續(xù)按下,則退出
            //否則再次提示
            if (currentBackDownTime - lastBackDownTime < 1000) {
                finish();
            } else {
                Toast.makeText(this, "連按2下退出應(yīng)用程序", Toast.LENGTH_SHORT).show();
                //如果沒(méi)有退出,則記錄本次按下Back鍵時(shí)間,作為下次時(shí)間參考
                lastBackDownTime = currentBackDownTime;
            }

            return true;
        }
        //按照默認(rèn)方式處理
        return super.onKeyDown(keyCode, event);
    }
}

運(yùn)行程序,當(dāng)連續(xù)按兩次返回鍵會(huì)退出程序,如果只按一次不會(huì)。

onBackPressed()

onBackPressed()這個(gè)方法就是專門用來(lái)監(jiān)聽(tīng) back 鍵事件的。所以可以用以下代碼完成 按兩次返回鍵退出程序 的功能。

@Override
    public void onBackPressed() {
        long currentBackDownTime = System.currentTimeMillis();
        if (currentBackDownTime - lastBackDownTime < 1000) {
            finish();
        } else {
            Toast.makeText(this, "連按2下退出應(yīng)用程序", Toast.LENGTH_SHORT).show();
            lastBackDownTime = currentBackDownTime;
        }
        super.onBackPressed();
    }

Fragment中監(jiān)聽(tīng)Back返回鍵

監(jiān)聽(tīng)手機(jī)上的 Back 鍵可以在 Activity 中重寫onBackPressed方法。

如果只有1個(gè) Activity 管理多個(gè) Fragment,每個(gè) Fragment 點(diǎn)擊 Back 鍵處理不同事件,可以在 Activity 中重寫 onBackPressed 方法,然后區(qū)分不同 Fragment 即可。

因?yàn)槲业?Fragment 用 tag 進(jìn)行了區(qū)分,區(qū)分當(dāng)前 tag 即可,代碼如下:

@Override
public void onBackPressed() {
	if(currentTag.equals("xx")) {
		doSomething();
    } else {
        // handle by activity
        super.onBackPressed();
	}
}

到此這篇關(guān)于Android 中的監(jiān)聽(tīng)和按鍵處理詳情的文章就介紹到這了,更多相關(guān)Android 監(jiān)聽(tīng) 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論