你好好在这个问题上花了几天时间,但我仍然没有得到确切的解决方案。
在我的布局中,我有“页眉和页脚”。在标题中我显示我的布局标题,在页脚中我显示AdView。我正在使用LinearLayout。
我的xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/create_job_parent_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#06506D"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/create_newjob_rlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
....
... 2 buttons and one TextView
</RelativeLayout>
<ScrollView
android:id="@+id/creat_scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/creat_scrollview_child_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="5dp" >
.
.10 edittext boxes
.
.
</LinearLayout>
</ScrollView>
<com.google.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/create_new_job_activity_adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:loadAdOnCreate="true"
app:adSize="SMART_BANNER"
app:adUnitId="adunitid" >
</com.google.ads.AdView>
</LinearLayout>
当键盘打开并且我在清单中添加“adjustResize”时,我的整个布局显示顶部,这意味着我的adview也会出现顶部。如果我在清单中添加“adjustPan”则没有任何事情发生(底部字段不滚动)。
在某些文档中我添加了scrollview作为父底部字段也会在键盘打开时滚动。但是如果我使用scrollview作为父级我的adview也会下降。但是我需要始终在底部显示adview。如何度特
任何人都可以帮助我..
答案 0 :(得分:1)
首先,定义一个类似于你的特殊LinearLayout的类:
public class MyLayout extends LinearLayout {
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyLayout(Context context) {
super(context);
}
private OnSoftKeyboardListener onSoftKeyboardListener;
@Override
protected void onMeasure(final int widthMeasureSpec,
final int heightMeasureSpec) {
if (onSoftKeyboardListener != null) {
final int newSpec = MeasureSpec.getSize(heightMeasureSpec);
final int oldSpec = getMeasuredHeight();
if (oldSpec > newSpec) {
onSoftKeyboardListener.onShown();
} else {
onSoftKeyboardListener.onHidden();
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public final void setOnSoftKeyboardListener(
final OnSoftKeyboardListener listener) {
this.onSoftKeyboardListener = listener;
}
public interface OnSoftKeyboardListener {
public void onShown();
public void onHidden();
}
}
现在您的xml布局将如下:
<com.example.MyLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/create_job_parent_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#06506D"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/create_newjob_rlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
/>
</RelativeLayout>
<ScrollView
android:id="@+id/creat_scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/creat_scrollview_child_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="5dp" >
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
/>
</LinearLayout>
</ScrollView>
<com.google.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/create_new_job_activity_adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:loadAdOnCreate="true"
app:adSize="SMART_BANNER"
app:adUnitId="adunitid">
</com.google.ads.AdView>
其中com.example是您创建MyLayout类的包名。
现在,您正在调用xml布局的活动中写下代码
((MyLayout)findViewById(R.id.create_job_parent_layout)).
setOnSoftKeyboardListener(new OnSoftKeyboardListener() {
@Override
public void onShown() {
findViewById(R.id.create_new_job_activity_adView).
setVisibility(View.GONE);
}
@Override
public void onHidden() {
findViewById(R.id.create_new_job_activity_adView).
setVisibility(View.VISIBLE);
}
});
这肯定会解决你的问题...
干杯...
答案 1 :(得分:0)
我建议您在每次关注EditText
视图时隐藏广告视图。使用View.isFocused()
检查是否有人关注。如果为true,则使用AdView.setVisibility(View.INVISIBLE);
。
如果没有关注editText
次观看,请使用AdView.setVisibility(View.VISIBLE);
展示广告。
没有直接的方法可以检查屏幕上是否显示键盘,但有一种解决方法,例如检查屏幕尺寸变化......
编辑:这是我建议的解决方案......一个侦听器,用于检测活动布局的根视图所采用的大小的任何变化。在活动根视图大小和活动窗口视图大小之间计算差异。如果它大于150,则很可能是键盘。
final View ad = (View) findViewById(R.id.create_new_job_activity_adView);
final View activityRootView = findViewById(R.id.create_job_parent_layout);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// calculate the difference between the root view height
// and the window view height
int heightDiff = activityRootView.getRootView()
.getHeight() - activityRootView.getHeight();
// if more than 100 pixels, its probably a keyboard...
if (heightDiff > 150) {
ad.setVisibility(View.INVISIBLE);
Log.i("moayad", "Keyboard is visible");
// keyboard is visible, do something here
} else {
ad.setVisibility(View.VISIBLE);
Log.i("moayad", "Keyboard is invisible");
// keyboard is not visible, do something here
}
}
});
答案 2 :(得分:0)
我在上面的代码中看到了两个错误..你没有在任何地方关闭父LinearLayout
而你已经关闭了
<RelativeLayout
android:id="@+id/create_newjob_rlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</RelativeLayout>
没有添加任何内容..你可能在错误的地方把它关闭了。
答案 3 :(得分:0)
给定的代码是使按钮可滚动,我也检查了它..
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:id="@+id/linearLayout1"
android:orientation="horizontal"
android:layout_height="fill_parent">
<Button
android:id="@+id/btnAll"
android:layout_height="wrap_content"
android:layout_width="80dip"
android:text="All"
android:background="@drawable/icon" />
<Button
android:id="@+id/btnBarAndRes"
android:layout_height="wrap_content"
android:layout_width="80dip"
android:text="Bar Restaurants"
android:layout_toRightOf="@+id/btnAll"
android:background="@drawable/icon" />
<Button
android:id="@+id/btnFashion"
android:layout_height="wrap_content"
android:layout_width="80dip"
android:text="FashionBeauty"
android:layout_toRightOf="@+id/btnBarAndRes"
android:background="@drawable/icon"/>
<Button
android:id="@+id/btnParty"
android:layout_height="wrap_content"
android:layout_width="80dip"
android:text="PartyEntertainment"
android:layout_toRightOf="@+id/btnFashion"
android:background="@drawable/icon"
/>
<Button
android:id="@+id/btnLife"
android:layout_height="wrap_content"
android:layout_width="80dip"
android:text="Life Style"
android:layout_toRightOf="@+id/btnParty"
android:background="@drawable/icon"
/>
</LinearLayout>
</HorizontalScrollView>
</ScrollView>