android ScrollView(卷轴视图)

ScrollView01.java:

 

package com.ScrollView01;

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 ScrollView01 extends Activity {
 private LinearLayout mLayout;
 private ScrollView mScrollView;
 private final Handler mHandler=new Handler();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //线性布局
        mLayout=(LinearLayout)findViewById(R.id.layout);
        mScrollView=(ScrollView)findViewById(R.id.ScrollView01);
       
        Button button=(Button)findViewById(R.id.Button01);
       
        button.setOnClickListener(mClickListener);
        //改变默认焦点切换
        button.setOnKeyListener(mAddButtonKeyListener);
    }
   
    //当点击按钮时,增加一个TextView和Button
    private Button.OnClickListener mClickListener=new Button.OnClickListener()
    {
     private int mIndex=1;
     @Override
     public void onClick(View arg0)
     {
      TextView mTextView=new TextView(ScrollView01.this);
      mTextView.setText("Text View"+mIndex);
      LinearLayout.LayoutParams p=new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.FILL_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT
        );
      //增加一个TextView到线性布局中
      mLayout.addView(mTextView,p);
      
      Button mButtonView=new Button(ScrollView01.this);
      mButtonView.setText("Button"+mIndex++);
      mLayout.addView(mButtonView,p);
      //改变默认焦点切换
      mButtonView.setOnKeyListener(mNewButtonKeyListener);
      //投递一个消息进行滚动
      mHandler.post(mScrollToBottom);
     }    
    };
    

    //新建后滚动到最后
    private Runnable mScrollToBottom=new Runnable()
    {
     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&&
     v==mLayout.getChildAt(mLayout.getChildCount()-1))
   {
    findViewById(R.id.Button01).requestFocus();
    return true;
   }
   // TODO Auto-generated method stub
   return false;
  }
 };
   

     //滚动到头回到尾
    private View.OnKeyListener mAddButtonKeyListener=new Button.OnKeyListener()
    {
     @Override
     public boolean onKey(View v,int keyCode,KeyEvent event)
     {
      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;
      }
     }
    };
}

 

 

main.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/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="Button"/>
</LinearLayout>
</ScrollView>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值