卷轴视图是指当拥有很多内容,一屏显示不完时,需要通过滚动来显示视图。比如在做一个阅读器的时候,文章很长,一页显示不完,那么就需要使用卷轴视图来滚动显示下一页。我们下面先来看看运行效果



Activity01
package com.yarin.android.Examples_04_20;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.ScrollView;import android.widget.TextView;public class Activity01 extends Activity{    private LinearLayout mLayout;       private ScrollView mScrollView;       private final Handler mHandler = new Handler();      /** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//创建一个线性布局        mLayout = (LinearLayout) findViewById(R.id.layout);           //创建一个ScrollView对象        mScrollView = (ScrollView) findViewById(R.id.ScrollView01);             Button button = (Button) findViewById(R.id.Button01);                 button.setOnClickListener(mClickListener);           //改变默认焦点切换           button.setOnKeyListener(mAddButtonKeyListener);}//Button事件监听//当点击按钮时,增加一个TextView和Buttonprivate Button.OnClickListener mClickListener = new Button.OnClickListener() {           private int mIndex = 1;           public void onClick(View arg0)         {               // TODO Auto-generated method stub                    TextView textView = new TextView(Activity01.this);               textView.setText("Text View " + mIndex);            //这里请不要困惑这里是设置 这个textView的布局 FILL_PARENT WRAP_CONTENT 和在xml文件里边设置是一样的            LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(                       LinearLayout.LayoutParams.FILL_PARENT,                       LinearLayout.LayoutParams.WRAP_CONTENT               );               //增加一个TextView到线性布局中            mLayout.addView(textView, p);                 Button buttonView = new Button(Activity01.this);               buttonView.setText("Button " + mIndex++);                      //增加一个Button到线性布局中            mLayout.addView(buttonView, p);               //改变默认焦点切换              buttonView.setOnKeyListener(mNewButtonKeyListener);             //投递一个消息进行滚动               mHandler.post(mScrollToBottom);           }              };               private Runnable mScrollToBottom = new Runnable()     {           public void run()        {               // TODO Auto-generated method stub                           int off = mLayout.getMeasuredHeight() - mScrollView.getHeight();               if (off > 0)             {                   mScrollView.scrollTo(0, off);               }                                  }       };           //事件监听    private View.OnKeyListener mNewButtonKeyListener = new View.OnKeyListener()     {           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.Button01).requestFocus();                   return true;               }               return false;           }       };         //事件监听    private View.OnKeyListener mAddButtonKeyListener = new Button.OnKeyListener()     {                  public boolean onKey(View v, int keyCode, KeyEvent event)         {               // TODO Auto-generated method stub                              View viewToFoucus = null;               if (event.getAction() == KeyEvent.ACTION_DOWN)             {               int iCount = mLayout.getChildCount();                 switch (keyCode)                 {                   case KeyEvent.KEYCODE_DPAD_UP:                       if ( iCount > 0)                     {                           viewToFoucus = mLayout.getChildAt(iCount - 1);                       }                       break;                   case KeyEvent.KEYCODE_DPAD_DOWN:                       if (iCount < mLayout.getWeightSum())                     {                           viewToFoucus = mLayout.getChildAt(iCount + 1);                       }                       break;                   default:                       break;                   }               }                 if (viewToFoucus != null)             {                   viewToFoucus.requestFocus();                   return true;               }             else             {                   return false;               }           }       }; }


布局文件
<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/layout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView0"/>

<Button
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button0"/>
</LinearLayout>
</ScrollView>
图片效果 源码见附件

更多相关文章

  1. Android(安卓)Notification使用系统通知栏布局出现的图标问题
  2. Android最简洁的自动换行布局组件
  3. Android(安卓)4.4 Kitkat Phone工作流程浅析(九)__状态通知流程
  4. Android(安卓)自定义ViewGroup
  5. Android开发工程师笔试题
  6. Android给控件添加触摸回调
  7. android animation动画效果的两种实现方式
  8. Android(安卓)可以自定义的标题
  9. android布局文件中一些属性介绍

随机推荐

  1. Android Fragment 基本介绍
  2. Android FlowLayout
  3. 安卓AIDL跨进程间通信
  4. Android 记录gitignore文件内容
  5. android判断网络是否能用
  6. 自定义ProgressBar的图片
  7. Android studio 多线程网络文件下载
  8. android studio无法关联源码
  9. Android之通信录中的联系人操作
  10. Android中WebView详解