新浪微博登陆2.0

问题: 点击新浪登陆的网页中的输入框无法弹软键盘。

解决:

mWebView.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
           case MotionEvent.ACTION_DOWN:
           case MotionEvent.ACTION_UP:
               if (!v.hasFocus()) {
                   v.requestFocus();
               }
               break;
       }
return false;
}
});

原因新新浪接口的WeiboDialog没有获取焦点。


  通过isFocusable()这个方法我们可以知道view是否具有接受焦点的资格,通过setFocusable().来设置view接受焦点的资格;

         对应在触摸模式下,你可以调用isFocusableInTouchMode().来获知是否有焦点来响应点触,也可以通过setFocusableInTouchMode().来设置是否有焦点来响应点触的资格.

         在Activity中,当我们按上下左右方向键时,view中的焦点也会移动,我们怎么控制他的移动顺序呢,在XML属性布局文件中,有四个属性: nextFocusDown , nextFocusLeft , nextFocusRight ,和nextFocusUp, 设置他们的值来明确焦点从当前界面移动下个界面的Id。例如:
<LinearLayout 
    android:orientation="vertical" 
    ... > 
  <Button android:id="@+id/topBtn" 
          android:nextFocusUp="@+id/bottomBtn" //当焦点处在这个topBtn按钮上,再按向上方向键,焦点就会移动到bottomBtn按钮上。
          ... /> 
  <Button android:id="@+id/bottomBtn" 
          android:nextFocusDown="@+id/topBtn" //当焦点处在这个bottomBtn按钮上,再按向下方向键,焦点就会移动到topBtn按钮上。
          ... /> 

</LinearLayout>

二.不让文本输入框默认获得焦点,弹出键盘占据我们的屏幕的方法

有时会遇到一种情况,在真机运行一个页面,焦点会默认在EditText上,然后自动弹出键盘来占据大半个屏幕。处理方法很简单。在配置文件中加一句:

<activity ...  android:windowSoftInputMode="stateAlwaysHidden|adjustResize"  />
这样即可,意思是默认隐藏键盘输入法。

三 当有个可滚动的空间嵌套时,比如ScrollView 中放置了 ListView或者ScrollView 或者EditText,怎么实现我们想要的效果,这个问题答案正在寻找中,有遇到的这个问题的朋友希望你能帮帮忙

onInterceptTouchEvent()的机制:

  1. down事件首先会传递到onInterceptTouchEvent()方法
  2. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理
  3. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。
  4. 如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理
  5. 如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理


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


问题: 
在代码中写了topButton.requestFocus();后,当程序运行时,上button没有获得焦点。 

解决办法: 
在初始化button时加入 
topButton.setFocusable(true);(只加这个没有用,同样无法获得焦点) 
topButton.setFocusableInTouchMode(true);(这个必须加,获得焦点和TouchMode有关)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值