2013-02-03 3 views
6

나는 뷰를 생성하고 이러한 뷰를 선형 레이아웃에 추가합니다.이 입력은 messanger 응용 프로그램과 같이 화면 하단의 edittext에서 가져옵니다. '완료'버튼을 누르면 해당 메시지가 트리거되어 해당 메시지의 선형 레이아웃에 메시지가 추가됩니다.Android, Admob/Adview는 edittext에서 포커스를 훔치기 때문에 어떻게 방지 할 수 있습니까?

문제 :

내가 예를 들어, 해당 메시지 사이에서 AdView를 데려 가고 싶다는 매 10 메시지 사이. Edittext가 포커스를 잃고 전체 레이아웃이 아래로 스크롤됩니다.

내가 원하는 무엇 :

EDITTEXT에 포커스가 손실되지해야하며 매번 열려 키보드 입력을위한 활성 대기해야한다. 초점을하고 기본보기처럼 행동하기로 AdView를 방지하기 위해 가능한 모든 방법

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; 

    } 

있습니까 : 내가 시도하고 작동하지 않았다 무엇

?

감사합니다.

+0

시도에서 명확한 초점에서 포커스를 제거하려면 –

+0

죄송 클릭, 난 그 edittext에 초점을 요청하려고 시도했음을 언급하는 것을 잊지 마세요.하지만 adview는 매번 집중해야 할 욕심이 많습니다! –

답변

0

문제를 해결하려면 onAdLoaded 이벤트에서 AdView 레이아웃 매개 변수를 설정해야합니다.

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

()는 광고가로드 될 때 그 후 사라졌다

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

     ......... 

     adView.setVisibility(View.GONE) 

     .......... 

    } 

에 AdView가의 가시성을 설정이 도움이 VISIBLE

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

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

희망에 가시성을 설정)

0

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

또는 가까운 소프트 키보드 버튼에 메시지를 추가 한 후 EditText.requestFocus()를 호출하는

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