原文地址:http://blog.csdn.net/wcs542882916
public class ActivityFocus extends Activity { private Button mBtnCenter; private Button mBtnLeft; private Button mBtnTop; private Button mBtnRight; private Button mBtnBottom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_focus); mBtnCenter = (Button) findViewById(R.id.btn_center); mBtnLeft = (Button) findViewById(R.id.btn_left); mBtnTop = (Button) findViewById(R.id.btn_top); mBtnRight = (Button) findViewById(R.id.btn_right); mBtnBottom = (Button) findViewById(R.id.btn_bottom); // focus ===================================================== mBtnCenter.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnBottom.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnTop.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnLeft.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnRight.requestFocus(); } return false; } }); mBtnLeft.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnBottom.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnTop.requestFocus(); }else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnRight.requestFocus(); } return false; } }); mBtnTop.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnCenter.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnLeft.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnRight.requestFocus(); } return false; } }); mBtnRight.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnBottom.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnTop.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnLeft.requestFocus(); } return false; } }); mBtnBottom.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_UP && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnTop.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnLeft.requestFocus(); } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && event.getAction() == KeyEvent.ACTION_DOWN) { return mBtnRight.requestFocus(); } return false; } }); // event ======================================================== mBtnCenter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: 2016/6/11 } }); mBtnLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: 2016/6/11 } }); mBtnTop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: 2016/6/11 } }); mBtnRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: 2016/6/11 } }); mBtnBottom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: 2016/6/11 } }); } }