版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/knockheart/article/details/22629311
情景:应用中可滚动内容过多的话,回到顶部需要滚动多次。今天做个小效果,仿网页的回到顶部功能。
如下图
方案:采用帧布局FrameLayout 有两个Button,包含一个ScrollView,两个Button分别跳转至顶部和底部
布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/sc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="What is Application
Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个name属性把自己的 Application的名字定入即可)。
android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局 的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过Application来进行一些,数据传递,数据共享 等,数据缓存等操作。
MemoryLeak
在Java中内存泄漏是只,某个(某些)对象已经不在被使用应该被gc所回收,但有一个对象持有这个对象的引用而阻止这个对象被回收。比如我 们通常会这样创建一个View TextView tv = new TextView(this);这里的this通常都是Activity。所以这个TextView就持有着这个Activity的引用。下面看张图 (Google IO 2011 ppt中抄得)
" >
</TextView>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/btn_toTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:text="^" />
<Button
android:id="@+id/btn_toBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="V" />
</FrameLayout>
代码:
public class MainActivity extends Activity {
private Button topBtn, bottomBtn;
private ScrollView sc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sc = (ScrollView) findViewById(R.id.sc);
topBtn = (Button) findViewById(R.id.btn_toTop);
bottomBtn = (Button) findViewById(R.id.btn_toBottom);
topBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sc.post(new Runnable() {
public void run() {
// 滚动至顶部
sc.fullScroll(ScrollView.FOCUS_UP);
}
});
}
});
bottomBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sc.post(new Runnable() {
public void run() {
// 滚动到底部
sc.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
});
}
}
实现起来非常简单:今天朋友提得一个小需求。效果图如下:点击左上按钮到内容最底部,右下角按钮同理