当前位置: 代码迷 >> Android >> Android中View怎么切换Focus
  详细解决方案

Android中View怎么切换Focus

热度:20   发布时间:2016-05-01 15:52:47.0
Android中View如何切换Focus

视图(View)类代表了一种基本的用户界面组成模块。一个视图占据了屏幕上的一个矩形区域,并响应绘制图形和事件处理。视图类是窗体类(Widget)的基类,而窗体类用来生成可交互的用户图形接口(interactive GUI)。

视图类的使用窗口中所有的视图构成一个树形结构。要想增加视图,既可以用直接添加代码的方法,也可以在一个或者多个XML文件中声明新视图构成的树。在视图类的子类中,有的可以用来控制,有的具有显示文字、图片或者其他内容的功能。

当视图树被创建后,以下这若干种通用操作将可以被使用:
1.设置属性(properties):比如,可以设置TextView类的一个实例的文本内容。不同的子类可以用来设置的属性与方法不同。注意:只有编译时能够检测到的属性才可以在XML布局管理(layout)文件中设置。

2.设置输入焦点(focus):为了响应用户输入,整个框架将处理移动的焦点。如果想把焦点强制指向某一个特定的视图,必须调用requestFocus()方法。
3.设置监听器(listener):在视图中,允许设置监听器来捕获用户感兴趣的某些事件。比如说, 在所有的视图中,无论视图是获得焦点还是失去焦点,都可以通过设置监听器来捕获。可以通过调用setOnFocusChangeListener(View.OnFocusChangeListener) 来注册一个监听器。在其他视图子类中,提供了一些更加特殊的监听器。比如,一个按键(Button)可以触发按键被按下的事件。
4.设置是否可视(visibility):可以通过调用setVisibility(int)来显示或者隐藏视图。

下面我以ImageButton为例来说一下如何使用
setOnFocusChangeListener来实现focus的切换.

UI如图显示.当focus切换时, 在中间的TextView上显示每个ImageButton的内容.



代码如下:
public class MainMenu extends Activity {
??? private ImageButton btnLogin, btnSet, btnAbout, btnHelp, btnVis;

??? public void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.mainmenu);
??????? setTitle("Main Menu-Select One Item#");
???????
??????? // Get the buttons, and set listeners.
??????? btnAbout = (ImageButton)findViewById(R.id.ibtnAbout);
??????? btnAbout.setOnClickListener(listener);?
??????? btnAbout.setOnFocusChangeListener(focusListener);

??????? //...

??????? //default focus in Login button.
??????? btnLogin.requestFocus(); //Can not work! Y??? Any one knows this?
?????
??????? // Get the TextView to display text.
??????? tvName = (TextView)findViewById(R.id.tvMenu);
??????? tvName.setText("");??????
??? }

??? OnClickListener listener = new OnClickListener(){
??? ??? public void onClick(View arg0){
??? ??? ??? switch(arg0.getId()){
??? ??? ??? case R.id.ibtnAbout:
??? ??? ??? ??? tvName.setText("About");
??? ??? ??? ??? Intent in = new Intent(MainMenu.this, about.class);
??? ??? ??? ??? startActivity(in);
??? ??? ??? ??? break;
??? ??? ??? //... ??
??? ??? ??? }
??? ??? }
??? };

??? OnFocusChangeListener focusListener = new OnFocusChangeListener(){
??? ??? public void onFocusChange(View v, boolean hasFocus) {
??? ??? ??? if (hasFocus){
??? ??? ??? ??? switch(v.getId()){
??? ??? ??? ??? case R.id.ibtnAbout:
??? ??? ??? ??? ??? tvName.setText("About");??? ??? ??? ??? ???
??? ??? ??? ??? ??? break;
??? ??? ??? ??? //.... ??
??? ??? ??? ??? }
??? ??? ??? }??? ???
??? ??? }
??? };
}

这里有一个问题,我还是不明白. 希望有哪位朋友告知. 当切换到此Activity的时候, 我希望默认的Focus是在Button Login上, 我调用
btnLogin.requestFocus();doestn't work! WHY?????

刚开始学Andorid, 知之甚少, 边学边练, 献丑了!
http://www.cnblogs.com/smoozer/archive/2008/11/19/1336795.html
  相关解决方案