0
点赞
收藏
分享

微信扫一扫

android 滚动视图(ScrollView)学习与应用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加按钮" />

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical">

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

</LinearLayout>




package com.scrollview;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
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 ScrollViewActivity extends Activity {
/** Called when the activity is first created. */
private Button button1;
private ScrollView scrollView1;
private LinearLayout linearLayout1;
private final Handler mHandler = new Handler();
private static final String LOG_TAG = "ScrollViewActivity";

@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
scrollView1 = (ScrollView) findViewById(R.id.scrollView1);

Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new Button.OnClickListener() {
private int mIndex = 1;
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
TextView textView = new TextView(ScrollViewActivity.this);
textView.setText("Text View " + mIndex);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
linearLayout1.addView(textView, p);

Button buttonView = new Button(ScrollViewActivity.this);
buttonView.setText("Button " + mIndex++);
linearLayout1.addView(buttonView, p);
//改变默认焦点切换
buttonView.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN &&
event.getAction() == KeyEvent.ACTION_DOWN &&
v == linearLayout1.getChildAt(linearLayout1.getChildCount() - 1)) {
findViewById(R.id.button1).requestFocus();
return true;
}
return false;
}
});
//投递一个消息进行滚动
mHandler.post(mScrollToBottom);
}
});
//改变默认焦点切换
button.setOnKeyListener(new Button.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.d(LOG_TAG, event.toString());

View viewToFoucus = null;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
int iCount = linearLayout1.getChildCount();
if ( iCount > 0) {
viewToFoucus = linearLayout1.getChildAt(iCount - 1);
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (linearLayout1.getChildCount() > 1) {
viewToFoucus = linearLayout1.getChildAt(1);
}
break;
default:
break;
}
}

if (viewToFoucus != null) {
viewToFoucus.requestFocus();
return true;
} else {
return false;
}
}
});
}


private Runnable mScrollToBottom = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d(LOG_TAG, "ScrollY: " + scrollView1.getScrollY());
int off = linearLayout1.getMeasuredHeight() - scrollView1.getHeight();
if (off > 0) {
scrollView1.scrollTo(0, off);
}
}
};

}

举报

相关推荐

0 条评论