2013-02-03 7 views
6

Sto creando visualizzazioni e aggiungo queste viste a una visualizzazione lineare, Questi input sono presi da edittext nella parte inferiore dello schermo come un'applicazione di messanger. Ogni volta che spingo il pulsante 'done', si innesca e aggiunge quel messaggio a tale messaggio linearlayout.Android, Admob/Adview prende | ruba attenzione da edittext, Come prevenire?

Il problema:

quando voglio mettere ADView tra quei messaggi per esempio tra ogni 10 messaggi. Edittext sta perdendo l'attenzione e questo fa sì che l'intero layout scorra verso il basso.

quello che voglio:

EditText non dovrebbe perdere la messa a fuoco e ogni volta che dovrebbe essere attesa attiva per l'input con la tastiera aperta.

quello che ho provato e non ha funzionato:

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; 

    } 

Esiste un modo possibile per evitare ADView a prendere fuoco e comportarsi come una vista normale?

Grazie.

+0

tenta di chiamare EditText.requestFocus() dopo l'aggiunta di messaggi sul tasto di scatto –

+0

dispiace, dimentico di dirlo, ho anche provato a chiedere attenzione a questo edittext, ma adview sembra così avido di focalizzarsi ogni volta! –

risposta

0

Per risolvere questo problema è necessario impostare i parametri di layout AdView in evento su AdLoaded.

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

On onCreate() impostare la visibilità di ADView per GONE

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

     ......... 

     adView.setVisibility(View.GONE) 

     .......... 

    } 

Dopo che quando annuncio viene caricato impostato la sua visibilità a VISIBILE

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

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

Spero che questo aiuti;)

0

Admob WebView si concentra in situazioni del genere. Per rimuovere attenzione alla vista banner, chiara focalizzazione dall'attività o chiudere tastiera virtuale

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

o chiudere tastiera virtuale

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