Android中View如何切换Focus

原文地址为: 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的内容.

cfd4acb71e2f6050bf127482f8066389.jpe

代码如下:
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, 知之甚少, 边学边练, 献丑了!

转载请注明本文地址: Android中View如何切换Focus

猜你喜欢

转载自blog.csdn.net/dearbaba_8520/article/details/81625447