如何将滚动条放到android中的底部字段?

时间:2014-04-14 05:27:33

标签: android scrollview

你好好在这个问题上花了几天时间,但我仍然没有得到确切的解决方案。

在我的布局中,我有“页眉和页脚”。在标题中我显示我的布局标题,在页脚中我显示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。如何度特

任何人都可以帮助我..

4 个答案:

答案 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>