【问题标题】:Android , Admob / Adview takes|steals focus from edittext , How to prevent?Android , Admob / Adview 从edittext 中获取焦点,如何防止?
【发布时间】:2013-01-18 05:43:54
【问题描述】:

我正在创建视图并将这些视图添加到一个线性布局中,这些输入来自屏幕底部的edittext,就像一个消息应用程序一样。每当我按下“完成”按钮时,它都会触发并将该消息添加到该消息线性布局中。

问题:

当我想在这些消息之间放置 adview 时,例如每 10 条消息之间。 Edittext 失去焦点,导致整个布局向下滚动。

我想要什么:

Edittext 不应该失去焦点,并且每次它应该处于活动状态,等待键盘打开的输入。

我尝试过但没有成功:

if (messageCounter % 10 == 0) {

        LinearLayout advertisedMessageLayout = new LinearLayout(this);
        advertisedMessageLayout.setOrientation(LinearLayout.VERTICAL);
        advertisedMessageLayout.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        AdView av = new AdView(this, AdSize.BANNER, MBConstants.ADVIEW_ID);
        //remove focus for every child of adview
        for (int i = 0; i < av.getChildCount(); i++) {
            av.getChildAt(i).setFocusable(false);
            av.getChildAt(i).setFocusableInTouchMode(false);
            av.getChildAt(i).setClickable(false);

        }
        av.setFocusable(false);
        av.setFocusableInTouchMode(false);
        av.setClickable(false);
        av.setEnabled(false);

        AdRequest request = new AdRequest();
        av.loadAd(request);

        advertisedMessageLayout.addView(messageRow);
        advertisedMessageLayout.addView(av);


        return advertisedMessageLayout;

    }

是否有任何可能的方法来阻止 adview 获得焦点并表现得像普通视图?

谢谢。

【问题讨论】:

  • 在按钮点击添加消息后尝试调用EditText.requestFocus()
  • 对不起,我忘了提,我也尝试过请求焦点到那个edittext,但是adview似乎每次都太贪心了!

标签: android focus admob setfocus adview


【解决方案1】:

要解决这个问题,您需要在 onAdLoaded 事件中设置 AdView 布局参数。

@Override
public void onAdLoaded() {
    super.onAdLoaded();
    LinearLayout.LayoutParams lay = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    adView.setLayoutParams(lay);
}

【讨论】:

    【解决方案2】:

    onCreate() 将 adview 的可见性设置为 GONE

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            .........
    
            adView.setVisibility(View.GONE)
    
           ..........
    
        }
    

    然后在加载广告时将其可见性设置为可见

    adView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
    
                adView.setVisibility(View.VISIBLE)
            }
        });
    

    希望这会有所帮助;)

    【讨论】:

      【解决方案3】:

      Admob WebView 在这种情况下获得焦点。要从横幅视图中移除焦点,请从活动中清除焦点或关闭软键盘

          etAddNote.setOnEditorActionListener(new TextView.OnEditorActionListener() {
              @Override
              public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                  if (actionId == EditorInfo.IME_ACTION_DONE) {           
                      activity.getCurrentFocus().clearFocus();
      
                      return true;
                  }
                  return false;
              }
          });
      

      或关闭软键盘

      etAddNote.setOnEditorActionListener(new TextView.OnEditorActionListener() {
              @Override
              public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                  if (actionId == EditorInfo.IME_ACTION_DONE) {
                      View view = activity.getCurrentFocus();
                      if (view != null) {
                          InputMethodManager imm = (InputMethodManager) activity
                                  .getSystemService(Context.INPUT_METHOD_SERVICE);
                          imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                      }
                      return true;
                  }
                  return false;
              }
          });
      

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多