6 votes

Android , Admob / Adview prend ou enlève le focus du texte d'édition , Comment l'empêcher ?

Je crée des vues et j'ajoute ces vues à un affichage linéaire, ces entrées sont prises dans le texte d'édition au bas de l'écran comme dans une application de messagerie. Je suis en train de créer des vues et d'ajouter ces vues à une structure linéaire.

Le problème :

Quand je veux mettre une publicité entre ces messages, par exemple tous les 10 messages. L'Edittext perd le focus et cela fait défiler toute la mise en page vers le bas.

Ce que je veux :

Le texte d'édition ne doit pas perdre le focus et doit toujours être actif, en attente de saisie avec le clavier ouvert.

Ce que j'ai essayé et qui 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;

    }

Existe-t-il un moyen d'empêcher l'affichage d'une vue de prendre le focus et de se comporter comme une vue normale ?

Gracias.

0voto

Jacek Points 21

Pour résoudre ce problème, vous devez définir les paramètres de mise en page de votre 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);
}

0voto

android Points 163

Sur onCreate() mettre la visibilité de la vue publicitaire à GONE

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

        .........

        adView.setVisibility(View.GONE)

       ..........

    }

Ensuite, lorsque la publicité est chargée, réglez sa visibilité sur VISIBLE.

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

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

J'espère que cela vous aidera ;)

0voto

Thracian Points 1602

L'Admob WebView gagne en importance dans ce genre de situation. Pour supprimer le focus de la vue de la bannière, effacez le focus de l'activité ou fermez le clavier logiciel.

    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 fermer le clavier souple

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X