我要用ScrollView写一个小程序。当最后一行获得焦点时,按向下导航键时第一个button按钮获得焦点,若当前焦点在第一个button按钮,按下向上导航键后使得最后一个button按钮获得焦点。但是在3.0版本上,首次获得焦点的总是logo。
以下是我的源代码:public class ScrollViewActivity extends Activity {
/** Called when the activity is first created. */
private LinearLayout mLayout;
private ScrollView mScollview;
private Handler mhandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout = (LinearLayout)findViewById(R.id.mlLayout);
mScollview =(ScrollView) findViewById(R.id.scollview);
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(mClickListener);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Button b = (Button) this.getCurrentFocus();
int count = mLayout.getChildCount();
Button mb = (Button) mLayout.getChildAt(count - 1);
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN && b.getId() == mb.getId()){
this.findViewById(R.id.button).requestFocus();
return true;
}else
if(keyCode == KeyEvent.KEYCODE_DPAD_UP && b.getId() == R.id.button){
mb.requestFocus();
return true;
}
return false;
}
private Runnable mScrollToButton = new Runnable(){ @Override
public void run() {
// TODO Auto-generated method stub
int off = mLayout.getMeasuredHeight() - mScollview.getHeight();
if(off > 0){
mScollview.scrollTo(0, off);
}
}
};
private Button.OnClickListener mClickListener = new Button.OnClickListener(){
private int index = 1;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView = new TextView(ScrollViewActivity.this);
textView.setText("textview" + index);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
mLayout.addView(textView,params);
Button button = new Button(ScrollViewActivity.this);
button.setText("button" + index);
button.setId(index++);
mLayout.addView(button,params);
mhandler.post(mScrollToButton);
}
};
}
以下是我的源代码:public class ScrollViewActivity extends Activity {
/** Called when the activity is first created. */
private LinearLayout mLayout;
private ScrollView mScollview;
private Handler mhandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout = (LinearLayout)findViewById(R.id.mlLayout);
mScollview =(ScrollView) findViewById(R.id.scollview);
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(mClickListener);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Button b = (Button) this.getCurrentFocus();
int count = mLayout.getChildCount();
Button mb = (Button) mLayout.getChildAt(count - 1);
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN && b.getId() == mb.getId()){
this.findViewById(R.id.button).requestFocus();
return true;
}else
if(keyCode == KeyEvent.KEYCODE_DPAD_UP && b.getId() == R.id.button){
mb.requestFocus();
return true;
}
return false;
}
private Runnable mScrollToButton = new Runnable(){ @Override
public void run() {
// TODO Auto-generated method stub
int off = mLayout.getMeasuredHeight() - mScollview.getHeight();
if(off > 0){
mScollview.scrollTo(0, off);
}
}
};
private Button.OnClickListener mClickListener = new Button.OnClickListener(){
private int index = 1;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView = new TextView(ScrollViewActivity.this);
textView.setText("textview" + index);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
mLayout.addView(textView,params);
Button button = new Button(ScrollViewActivity.this);
button.setText("button" + index);
button.setId(index++);
mLayout.addView(button,params);
mhandler.post(mScrollToButton);
}
};
}
int count = mLayout.getChildCount();
Button mb = (Button) mLayout.getChildAt(count - 1);
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN && b.getId() == mb.getId()){
this.findViewById(R.id.button).requestFocus();
return true;
}else
if(keyCode == KeyEvent.KEYCODE_DPAD_UP && b.getId() == R.id.button){
mb.requestFocus();
return true;
}
}
return false;