2013-02-03 3 views
6

Je crée des vues et j'ajoute ces vues à une présentation linéaire. Ces entrées sont extraites d'edittext en bas de l'écran comme une application de messagerie. Chaque fois que j'appuie sur le bouton 'done', il se déclenche et ajoute ce message à ce message linearlayout.Android, Admob/Adview prend | steals focus de edittext, Comment prévenir?

Le problème:

Quand je veux mettre adview entre ces messages par exemple entre chaque 10 message. Edittext perd le focus et cela entraîne la mise en page entière pour défiler vers le bas.

Ce que je veux:

EditText ne doit pas perdre le focus et chaque fois qu'il devrait être attente active pour la saisie avec le clavier ouvert.

Ce que j'ai essayé et n'a pas fonctionné:

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; 

    } 

Est-il possible possible d'empêcher adview de prendre le focus et se comporter comme une vue normale?

Merci.

+0

d'essayer d'appeler EditText.requestFocus() après avoir ajouté des messages sur CLICK –

+0

désolé, je oubliez de mentionner cela, j'ai également essayé de demander la mise au point à ce edittext, mais adview semble tellement gourmand de prendre la mise au point à chaque fois! –

Répondre

0

Pour résoudre ce problème, vous devez définir vos paramètres de disposition AdView dans l'événement onAdLoaded.

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

Sur onCreate() définir la visibilité de adview à GONE

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ......... 

     adView.setVisibility(View.GONE) 

     .......... 

    } 

Après que lorsque l'annonce est chargée mis sa visibilité à VISIBLE

adView.setAdListener(new AdListener() { 
     @Override 
     public void onAdLoaded() { 
      super.onAdLoaded(); 

      adView.setVisibility(View.VISIBLE) 
     } 
    }); 

Hope this helps;)

0

Admob WebView gagne du focus dans des situations comme celle-là. Pour supprimer le focus de la vue de la bannière, orientation claire de l'activité ou le clavier mou près

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; 
     } 
    }); 

ou un clavier souple près

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; 
     } 
    });