package com.teprinciple.webviewdemo; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class BlueToothActivity extends AppCompatActivity { private TextView blueText; private RecyclerView recyclerView; List<String> mData = new ArrayList<>(); int currentIndex = 0;//小技巧: 默認等於0 則默認選中第一項 默認等於<0 則默認不選中 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blue); blueText = (TextView) findViewById(R.id.blueText); init(); } private void init() { recyclerView = (RecyclerView) findViewById(R.id.ly_recycler_view); for (int i = 0; i < 30; i++) { mData.add("A-"+i); } recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); recyclerView.setAdapter(new ItemAdapter()); //notifyItemChanged() 默認有動畫 //去掉默認刷新動畫 ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); } class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder>{ @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { return new ViewHolder(LayoutInflater.from(BlueToothActivity.this).inflate(R.layout.item_layout,viewGroup,false)); } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int position) { String text = mData.get(position); viewHolder.textView.setText(text); if (currentIndex == position){ viewHolder.textView.setBackgroundColor(Color.RED); }else { viewHolder.textView.setBackgroundColor(Color.BLUE); } viewHolder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int lastIndex = currentIndex; currentIndex = position; notifyItemChanged(currentIndex); if (!(lastIndex<0)){ notifyItemChanged(lastIndex); } } }); } @Override public int getItemCount() { return mData.size(); } class ViewHolder extends RecyclerView.ViewHolder{ TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text_view); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { printToast(parseKeyCode(keyCode)); return true; } public String parseKeyCode(int keyCode) { String ret = ""; switch (keyCode) { case KeyEvent.KEYCODE_POWER: // 監控/攔截/屏蔽電源鍵 這里攔截不了 ret = "get Key KEYCODE_POWER(KeyCode:" + keyCode + ")"; break; case KeyEvent.KEYCODE_RIGHT_BRACKET: // 監控/攔截/屏蔽返回鍵 ret = "get Key KEYCODE_RIGHT_BRACKET"; break; case KeyEvent.KEYCODE_MENU: // 監控/攔截菜單鍵 ret = "get Key KEYCODE_MENU"; break; case KeyEvent.KEYCODE_HOME: // 由於Home鍵為系統鍵,此處不能捕獲 ret = "get Key KEYCODE_HOME"; break; case KeyEvent.KEYCODE_DPAD_UP: // 監控/攔截/屏蔽上方向鍵 ret = "get Key KEYCODE_DPAD_UP"; break; case KeyEvent.KEYCODE_DPAD_LEFT: // 監控/攔截/屏蔽左方向鍵 ret = "get Key KEYCODE_DPAD_LEFT"; break; case KeyEvent.KEYCODE_DPAD_RIGHT: // 監控/攔截/屏蔽右方向鍵 ret = "get Key KEYCODE_DPAD_RIGHT"; break; case KeyEvent.KEYCODE_DPAD_DOWN: // 監控/攔截/屏蔽下方向鍵 ret = "get Key KEYCODE_DPAD_DOWN"; break; case KeyEvent.KEYCODE_DPAD_CENTER: // 監控/攔截/屏蔽中方向鍵 ret = "get Key KEYCODE_DPAD_CENTER"; break; case KeyEvent.FLAG_KEEP_TOUCH_MODE: // 監控/攔截/屏蔽長按 ret = "get Key FLAG_KEEP_TOUCH_MODE"; break; case KeyEvent.KEYCODE_VOLUME_DOWN: // 監控/攔截/屏蔽下方向鍵 ret = "左(KeyCode:" + keyCode + ")"; int lastIndexLeft = currentIndex; currentIndex = currentIndex - 1; recyclerView.getAdapter().notifyItemChanged(currentIndex); if (!(lastIndexLeft<0)){ recyclerView.getAdapter().notifyItemChanged(lastIndexLeft); } break; case KeyEvent.KEYCODE_VOLUME_UP: // 監控/攔截/屏蔽中方向鍵 ret = "右(KeyCode:" + keyCode + ")"; int lastIndex = currentIndex; currentIndex = currentIndex + 1; recyclerView.getAdapter().notifyItemChanged(currentIndex); if (!(lastIndex<0)){ recyclerView.getAdapter().notifyItemChanged(lastIndex); } break; case KeyEvent.KEYCODE_3: ret = "下(KeyCode:" + keyCode + ")"; break; case KeyEvent.KEYCODE_4: ret = "上(KeyCode:" + keyCode + ")"; break; case KeyEvent.KEYCODE_ENTER: ret = "中(KeyCode:" + keyCode + ")"; break; case KeyEvent.KEYCODE_HEADSETHOOK: ret = "耳機確定中(KeyCode:" + keyCode + ")"; Toast.makeText(this, "跳轉故障記錄頁面進行填寫", Toast.LENGTH_SHORT).show(); break; default: ret = "其他: " + keyCode; break; } return ret; } public void printToast(String str) { blueText.setText(str); } }
頁面:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" tools:context=".HomeActivity"> <TextView android:id="@+id/blueText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="00000" android:textColor="@color/black" android:textStyle="bold" android:textSize="20dp"/> <android.support.v7.widget.RecyclerView android:id="@+id/ly_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" /> </RelativeLayout>
可監聽耳機以及藍牙拍照器