1.activity_scrollview.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"
     >

<LinearLayout
        android:id="@+id/linearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

<TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="TextView0" />

<Button
            android:id="@+id/button001"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Button0" />

</LinearLayout>

</ScrollView>
2、ScrollViewActivity

public class ScrollViewActivity extends Activity {
    private LinearLayout mLayout;
    private ScrollView mScrollView;
    private final Handler mHandler = new Handler();

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrollview);
        mLayout = (LinearLayout) findViewById(R.id.linearLayout01);
        mScrollView = (ScrollView) findViewById(R.id.scrollView01);
        Button button = (Button) findViewById(R.id.button001);
        // 设置Button点击事件
        button.setOnClickListener(mClickListener);
        // 改变默认焦点切换
        button.setOnKeyListener(mAddButtonKeyListener);
    }

// button事件监听,点击按钮时,增加一个TextView和Button
    private Button.OnClickListener mClickListener = new Button.OnClickListener() {
        private int mIndex = 1;

@Override
        public void onClick(View v) {
            TextView textView = new TextView(ScrollViewActivity.this);
            textView.setText("Text View:" + mIndex);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            // 增加一个TextView到线性布局中
            mLayout.addView(textView, params);
            Button buttonView = new Button(ScrollViewActivity.this);
            buttonView.setText("button :" + mIndex++);
            // 增加一个Button到线性布局中
            mLayout.addView(buttonView, params);
            // 改变默认焦点切换**************************
            buttonView.setOnKeyListener(mNewButtonKeyListener);
            // 投递一个消息进行滚动
            mHandler.post(mScrollToButtom);
        }
    };

private Runnable mScrollToButtom = new Runnable() {

@Override
        public void run() {
            int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();
            if (off > 0) {
                mScrollView.scrollTo(0, off);
            }
        }
    };
    // 事件监听
    private View.OnKeyListener mNewButtonKeyListener = new View.OnKeyListener() {

@Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN
                    && event.getAction() == KeyEvent.ACTION_DOWN
                    && v == mLayout.getChildAt(mLayout.getChildCount() - 1)) {
                findViewById(R.id.button001).requestFocus();
                return true;
            }
            return false;
        }
    };
    // 事件监听
    private View.OnKeyListener mAddButtonKeyListener = new Button.OnKeyListener() {

@Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            View viewToFocus = null;
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                int iCount = mLayout.getChildCount();
                switch (keyCode) {
                case KeyEvent.KEYCODE_DPAD_UP:
                    if (iCount > 0) {
                        viewToFocus = mLayout.getChildAt(iCount - 1);
                    }
                    break;
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    if (iCount < mLayout.getWeightSum()) {
                        viewToFocus = mLayout.getChildAt(iCount + 1);
                    }
                    break;

default:
                    break;
                }
            }
            if (viewToFocus != null) {
                viewToFocus.requestFocus();
                return true;
            } else {
                return false;
            }
        }
    };

}

Android——ScrollView的更多相关文章

  1. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  2. Android ScrollView用法

    Android ScrollView用法 今天试着使用了一下Android的滚轮,以下是一个小小的测试,读取测试文件,主要是使用scrollTo函数和getScrollY(),程序点击BUTTON按钮 ...

  3. Android ScrollView嵌套ScrollView滚动的问题解决办法

    引用:http://mengsina.iteye.com/blog/1707464 http://fenglog.com/article.asp?id=449 Android ScrollView嵌套 ...

  4. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  5. Android ScrollView与ListView的冲突解决办法汇总

    1. public  void setListViewHeight(){ ListAdapter listadapter = lv.getAdapter(); if (listadapter == n ...

  6. Android ScrollView中的组件设置android:layout_height="fill_parent"不起作用的解决办法

    例子,在ScrollView下加入的组件,无论如何也不能自动扩展到屏幕高度. 布局文件. [html] <?xml version="1.0" encoding=" ...

  7. android:ScrollView嵌套ListView的问题

    在ScrollView中嵌套使用ListView,看起来ListView只会显示一行多一点,不能滑动.ListView的高度怎么改都有问题,与预期不符合.搜索了一些解决方案,我觉得最好不要用这样的设计 ...

  8. 关于禁止Android scrollView 因内容变化而自动滚动 android:descendantFocusability

    出现这种情况是因为你让scrollview获得了焦点,所以它才会滚动.如果你百度了以后,你可能会发现有些博客会说让焦点停在固定的一个view中就可以了.这对于不存在刷新的页面确实是可以的,但是当你出现 ...

  9. Android Scrollview 内部组件android:layout_height="fill_parent"无效的解决办法

    Found the solution myself in the end. The problem was not with the LinearLayout,  but with the Scrol ...

随机推荐

  1. HiveQ与传统SQL差异

    1.   hive内连接支持什么格式? • SQL中对两表内联可以写成:        select * from dual a,dual b where a.key = b.key; 或者: SEL ...

  2. DW(一):大数据DW架构参考

    DW一直以来是企业信息与决策支持系统的核心组件,随着各类日志.社交.传感等非结构化数据的加入,企业内部数据按指数级增长,传统DW已经达到一个关键临界点——需要大量的资源投入到硬件.优化.支持和维护中, ...

  3. XAMPP 在windows下无法启动Apache解决方案

    XAMPP 在windows下无法启动Apache解决方案 一.现象 XAMPP 点击Start Apache时出现如下错误 20:41:12  [Apache] Error: Apache shut ...

  4. 【web】 亿级Web系统搭建——单机到分布式集群

      当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架 ...

  5. TP控制器(Controller)

    控制器的一些方法: Maincontroller.class.php文件: <?php namespace Home\Controller; use Think\Controller; clas ...

  6. PHP析构函数与垃圾回收

    析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行. GC (Garbage Collector) 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁.这是PHP ...

  7. CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...

  8. Chrome离线下载地址

    每当chrome有更新之后,都有不少用户想要下载离线版的安装文件,但苦于找不到下载地址而发愁,其实这个问题很简单,下面我来分享一下方法(仅针对Windows操作系统): 对于稳定版(正式版)Chrom ...

  9. 判断是否含有中文,包含返回true,不包含返回false

    /** * 功能:判断是否含有中文,包含返回true,不包含返回false */ function isChina(s) { var patrn = /[\u4E00-\u9FA5]|[\uFE30- ...

  10. Mongodb集群搭建及spring和java连接配置记录

    一.基本环境: mongdb3.0.5数据库 spring-data-mongodb-1.7.2.jar mongo-java-driver-3.0.2.jar linux-redhat6.3 tom ...