在选项卡布局上实现分页

2024-01-29

我知道如何使用 xml 布局开发选项卡活动,而且我知道如何在 android 中进行分页,如 android market 应用程序中所示

但我不知道如何将此分页概念与选项卡活动合并以及如何从 java 代码创建选项卡活动:

请参阅下面的代码,我使用线性布局进行分页:

示例.java

public class Sample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // creates the Pagination Layout
        PaginationLayout paginationLayout = new PaginationLayout(this);
        paginationLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        // creates content only for sample
        TableLayout table = new TableLayout(this);
        table.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        table.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);

        TableRow row = new TableRow(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        table.addView(row);

        TableRow row2 = new TableRow(this);
        row2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        table.addView(row2);

        for(int i = 0; i< 50;i++){
            Button button = new Button(this);
            button.setText("Button " + i);
            if (i%2==0) {
                row.addView(button);
            } else {
                row2.addView(button);
            }
        }

        // add the content in pagination
        paginationLayout.addView(table);
        // set pagination layout
        setContentView(paginationLayout);
    }
}

分页布局的代码是:

public class PaginationLayout extends LinearLayout {

    private int mPageActive = 0;
    private HorizontalScrollView mScroll;
    private LinearLayout mBar;

    public PaginationLayout(Context context) {
        super(context);

        setOrientation(LinearLayout.VERTICAL);

        // creates the class that will control the gestures and apply it in the
        // scroll
        final GestureDetector mGestureDetector = new GestureDetector(new MySimpleOnGestureListener());

        mScroll = new HorizontalScrollView(context);
        mScroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        mScroll.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if (mGestureDetector.onTouchEvent(event)) {
                    return true;
                } else {
                    return false;
                }
            }
        });

        // creates Previous and Next buttons
        Button btnPrevious = new Button(getContext());
        btnPrevious.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
        btnPrevious.setText("Previous");
        btnPrevious.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                previous();
            }
        });

        Button btnMid = new Button(getContext());
        btnMid.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
        btnMid.setText("Mid");
        btnMid.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                next();
            }
        });

        Button btnNext = new Button(getContext());
        btnNext.setLayoutParams(new LayoutParams(150, LayoutParams.FILL_PARENT));
        btnNext.setText("Next");
        btnNext.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                next();
            }
        });

        // bar that include the buttons
        mBar = new LinearLayout(getContext());
        mBar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        mBar.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
        mBar.setBackgroundColor(Color.GRAY);
        mBar.addView(btnPrevious);
        mBar.addView(btnNext);
        //mBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.android_1080p));
        mBar.setVisibility(LinearLayout.INVISIBLE);

        // add bar and scroll in the super (LinearLayout)
        super.addView(mBar);
        super.addView(mScroll);
    }

    /**
     * All that the user include is added in the scroll
     */
    @Override
    public void addView(View child) {
        mScroll.addView(child);
    }

    /**
     * Controls if the top bar should appear or not
     */
    @Override
    protected void onSizeChanged(int arg0, int arg1, int arg2, int arg3) {
        super.onSizeChanged(arg0, arg1, arg2, arg3);
        View chield = mScroll.getChildAt(0);
        if (chield != null) {
            if (chield.getMeasuredWidth() > getWidth()) {
                mBar.setVisibility(LinearLayout.VISIBLE);
            } else {
                mBar.setVisibility(LinearLayout.INVISIBLE);
            }
        }
    }

    /**
     * does the effect "back a page"
     */
    public void previous() {
        mPageActive = (mPageActive > 0) ? mPageActive - 1 : 0;
        mScroll.smoothScrollTo(mPageActive * mScroll.getWidth(), 0);
    }

    /**
     * does the effect "forward a page"
     */
    public void next() {
        int pageWidth = mScroll.getWidth();
        int nextPage = (mPageActive + 1) * pageWidth;
        if (nextPage - mScroll.getScrollX() <= pageWidth) {
            mScroll.smoothScrollTo(nextPage, 0);
            mPageActive++;
        } else {
            mScroll.smoothScrollTo(mScroll.getScrollX(), 0);
        }
    }

    /**
     * Private class that controls the gestures, forward or back a page.
     */
    private class MySimpleOnGestureListener extends SimpleOnGestureListener {

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            if (e1 != null && e2 != null) {
                if (e1.getX() - e2.getX() > 0) {
                    // forward...
                    next();
                    return true;
                } else if (e2.getX() - e1.getX() > 0) {
                    // back...
                    previous();
                    return true;
                }
            }

            return false;
        }
    }
}

我发现了this http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/这也许有帮助;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在选项卡布局上实现分页 的相关文章

  • Android 中的短信编码

    我的问题是我想发送特定类别和特定编码的短信 0 类和 7 位编码 当检查 Android Telephony SmsManager 和 SmsMessage 时 您无能为力 SmsManager 提供两个功能 发送文本消息和发送数据消息 如
  • Android Wear:在手持设备上启动服务

    我正在构建一个 Wear 应用程序 它将与手持设备上的 WearableListenerService 进行通信 但是 我想确保当应用程序在手表上启动时服务已启动并运行 我最初的想法是发送意图或广播消息来启动服务 但是 我一直无法弄清楚如何
  • 如何在android中将多个图像合并为一个图像?

    我正在开发 android 的分布式应用程序 我已将单个图像分成 4 个部分 然后对其进行处理 现在我想将 4 个位图图像组合成一个图像 我怎样才能做到这一点 Bitmap parts new Bitmap 4 Bitmap result
  • ViewPager 显示的第一个片段与 FragmentStatePager 总是错误的

    我正在尝试拥有相同的view pager tabs设计为 PlayStore 5 1 x 这是我的布局
  • 在styles.xml中设置所有按钮样式

    我想让我的应用程序有多种样式 样式更改按钮样式 文本视图颜色和布局背景颜色 我的按钮样式位于 xml 文件中 这是我的代码 style xml v21
  • 无法从视图转换为按钮

    我在这里遇到非常令人沮丧的问题 我有这个代码 Button b findViewById android R id button1 我收到了这个错误 类型不匹配 无法将表单视图转换为按钮 但是按钮1is一个按钮 在我的 XML 布局文档中
  • Android - 如何设置所有屏幕的背景颜色?

    维护字体和颜色样式的最佳实践是什么 我制作了一个 color xml 文件 用于更改按钮等单独元素的颜色 但我不确定 Android 希望开发人员如何组织他们的样式 例如 我希望所有屏幕都具有相同的背景颜色 我怎么做 我需要为每个 Acti
  • 终端 (Mac) 上的 ndk-build 命令出错

    这是我在 bashrc 中的环境变量设置 export ANDROID SDK AndroidSDK android sdks export ANDROID NDK AndroidNDK android ndk r8d export PAT
  • Android Facebook SDK 和 URL 方法成功形成好友对话框,但无法提交

    我开始认为这是一个错误 请证明我错了 我想以编程方式在 Facebook 上加好友 他们是唯一且肯定是该人在现实生活中认识的人 以下三种解决方案都具有相同的结果 成功的好友对话框 意味着个人资料名称 图片 指示操作的语句 与某人成为好友 以
  • Android 缩放和密度问题

    Update 一些研究表明 华硕 Transformer TF700T 高端 的像素密度应约为 224 因此 android 报告的 159 值要么是错误的 要么已被某种方式修改 system 中的 lcd 密度键 build prop 由
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • Android 原生 AAssetManager 的文件层次结构

    Issue 我想知道如何从本机代码创建 Android 中资产文件夹的文件层次结构 我在用着AAssetManager openDir but AAssetDir getNextFileName不返回任何目录名称 因此基本上我无法深入了解层
  • XML 文档结构必须在同一实体内开始和结束

    我是 eclipse 的新手 我刚刚开始编写一些代码 实际上只是从网站复制并粘贴 谁能帮我解决这个问题 错误出现在最后一行
  • Android 中 Activity 的服务回调

    我有我的 GPSTracker 的摘要 它返回用户的位置 其作品 public class GPSTracker extends Service implements LocationListener public GPSTracker C
  • Android 中可以导入 java.rmi.* 吗?

    我的分布式系统课程中有一个项目 我们必须在我们的项目中使用 java rmi 而且我知道由于 dalvik VM 问题 android 不提供这个库 所以我只是想问是否可以在 Android 上使用这些库 Thanks Android 不支
  • Android Studio:src/androidTest 和 src/main 文件夹之间的区别?

    我是 Android Studio 的新手 我的问题是 src androidTest 和 src main 文件夹有什么区别 我所有的课程应该放在哪里 Refer Android Studio 概述 http developer andr
  • 如何强制刷新 CallLog.Calls.CACHED_NAME 列?

    我的目标是从通话记录中收集所有未知的电话号码 这可以通过以下代码来实现 private static final String CALLOG PROJECTION CallLog Calls ID CallLog Calls CACHED
  • Android 布局以 开头 [重复]

    这个问题在这里已经有答案了 我是 Android 应用程序开发的初学者 我的问题很简单 我似乎无法确定布局文件夹中的 xml 文件是否应以以下开头 当我制作一个入门项目时 它不存在 但我也在读一本书 上面说它应该在那里 正确的方法是什么 嗯
  • Flutter 中 Android RecyclerView.SCROLL STATE IDLE 的等价物是什么

    Android 给出的滚动状态如下RecyclerView SCROLL STATE IDLE它告诉用户何时停止滚动 我找不到任何选择在颤动中Pageview or ListView滚动监听器 我的问题 我需要检测 PageView 中的向
  • 在 Android 上提取/修改视频帧

    我有一个视频文件 我想获取视频的每一帧并对帧进行一些修改 例如在其中绘制另一个位图 放置一些文本等 Android 中是否有任何 API 框架可用于从视频中获取帧 我在 iOS 中使用他们的 AVFramework 做了类似的事情 如果可以

随机推荐