我一直遇到麻烦,让adMob横幅沿着软键盘滚动并覆盖我的文字视图....
这是我在Android中尝试实现的内容的链接:http://bit.ly/myfoodcalc
我知道我的布局有点复杂,嵌套视图太多(可能)等等。
我试图改变Manifest上的东西但没有成功。
为了让你更好地理解它,这里是son伪XML(以及帖子后面的完整XML)......
<ScrollView>
<Linear layout>
<ImageView>
<TableView>
<Several rows with a Edit Text widget>
</TableView>
</ImageView>
</LinearLayout>
</ScrollView>
<FrameLayout>
<ImageView>
</FrameLayout>
这是我的完整XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/relativeLayout"
android:background="@drawable/backgroundwithtext">
<ScrollView android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<ImageView android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:src="@drawable/icon"
android:layout_height="wrap_content"></ImageView>
<TableLayout android:id="@+id/tableLayout1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/backgroundsmallobj">
<TableRow android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:text="TITLE"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView1">
</TextView>
</TableRow>
<TableRow android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText android:text="EditText"
android:maxLines="1"
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionNext">
</EditText>
</TableRow>
<TableRow android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText android:text="EditText"
android:maxLines="1"
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionNext">
</EditText>
</TableRow>
<TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content">
<EditText android:text="EditText"
android:maxLines="1"
android:id="@+id/editText4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionNext">
</EditText>
</TableRow>
<TableRow android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText android:text="EditText"
android:maxLines="1"
android:id="@+id/editText5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionNext">
</EditText>
</TableRow>
<TableRow android:id="@+id/tableRow6" android:layout_width="wrap_content" android:layout_height="wrap_content">
<EditText android:text="EditText" android:maxLines="1" android:id="@+id/editText6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:imeOptions="actionDone"></EditText>
</TableRow>
<TableRow android:id="@+id/tableRow7" android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:id="@+id/button1" android:layout_height="wrap_content" android:text="Button" android:layout_width="wrap_content"></Button>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
<FrameLayout android:id="@+id/frameLayout1"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent">
<com.google.ads.AdView android:id="@+id/adView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
ads:adUnitId="############"
ads:adSize="BANNER"
ads:loadAdOnCreate="true" />
</FrameLayout>
</RelativeLayout>
答案 0 :(得分:16)
您可以更改键盘在广告上显示时的行为方式。转到AndroidManifest.xml并使用AdMob横幅在活动代码中添加此属性。
android:windowSoftInputMode="adjustPan"
这样可以防止广告跳到键盘上方并隐藏输入。相反,它们将出现在键盘后面(隐藏)。我不知道这是否违反AdMob政策,我只是提供解决方案。
答案 1 :(得分:1)
我尝试设置android:windowSoftInputMode =&#34; adjustPan&#34;。 它隐藏了adMob横幅,但也是EdiText。 所以我找到的解决方案是在键盘打开时隐藏adMob横幅。 我学会了如何检测键盘是否打开here。 这是我的解决方案:
final View activityRootView = findViewById(R.id.sample_main_layout);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > Support.dpToPx(MainActivity.this, 200)) { // if more than 200 dp, it's probably a keyboard...
mAdView.setVisibility(View.GONE);
}
else{
mAdView.setVisibility(View.VISIBLE);
}
}
});
答案 2 :(得分:1)
将此添加到您的Manifest活动中 机器人:windowSoftInputMode = “stateVisible | adjustPan”
答案 3 :(得分:0)
这对您来说可能不是理想的解决方案,但我发现这对我的用户来说是最好的。当键盘显示时,它覆盖了我的WebView中的按钮和文本,从而导致糟糕的用户体验。为了解决这个问题,我将AdView高度设置为横幅广告的高度,在我的情况下为50dp,并将AdView布局设置为下方的WebView。最后,我将WebView高度设置为wrap_content。当键盘可见时,广告会被临时删除,因为广告空间不足,当隐藏键盘时,广告会再次显示。希望这可以帮助。
<WebView
android:id="@+id/webUI"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<com.google.ads.AdView android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/webUI" />