HorizontalScrollView动态添加组件,限制一页的个数

      在开发中我们有时候需要动态显示一些菜单组件(同一类型),因为组件不是很多,可是呢,如果一排全部显示出来又显得太挤,所以我们就会想着可以让用户可以滑动,而在界面上显示固定个数的菜单组件,那么如何来做呢?看下面代码

ScrollView标签下只能有一个子布局

<HorizontalScrollView
    android:layout_width="match_parent"
    android:id="@+id/hsv"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="wrap_content"
        android:id="@+id/llco"
        android:orientation="horizontal"
        android:layout_height="wrap_content"/>
</HorizontalScrollView>

我略过了查找组件以及数据的获取,因为这些都不是重点

下面是主要的步骤

private void setData() {

    //---这里是重点,下面我单独拿出来讲明
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    //---
    
    
    //根据后台传递过来的数据,动态创建添加组件
    for (int i = 0; i < mBeanTests.size(); i++) {
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setPadding(DensityUtils.dp2px(this, 5),
                DensityUtils.dp2px(this, 2),
                DensityUtils.dp2px(this, 5),
                DensityUtils.dp2px(this, 2));
        linearLayout.setDividerPadding(DensityUtils.dp2px(this, 10));

        //这里,我让一个界面默认显示四个菜单组件
        linearLayout.setLayoutParams(
                new LinearLayout.LayoutParams(metrics.widthPixels / 4, LinearLayout.LayoutParams.WRAP_CONTENT));
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        linearLayout.setGravity(Gravity.CENTER);
        TextView textView = new TextView(this);
        textView.setTextSize(12);
        textView.setGravity(Gravity.CENTER);
        textView.setText(mBeanTests.get(i).getTit());
        ImageView imageView = new ImageView(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(DensityUtils.dp2px(this, 30), DensityUtils.dp2px(this, 30));
        imageView.setLayoutParams(layoutParams);
        imageView.setPadding(DensityUtils.dp2px(this, 2), 0,
                DensityUtils.dp2px(this, 2),
                DensityUtils.dp2px(this, 2));
        Picasso.with(this).load(mBeanTests.get(i).getImgurl()).config(Bitmap.Config.RGB_565).into(imageView);
        linearLayout.addView(imageView);
        linearLayout.addView(textView);
        //每一次循环都将创建的组件添加进容器控件中
        mLlco.addView(linearLayout);
        final int finalI = i;
        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(TestScrollActivity.this, finalI + "--", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

下面的内容来自:http://wenda.jikexueyuan.com/question/31018/

DisplayMetrics用来可以获取屏幕参数
Andorid.util包下的DisplayMetrics类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
为了获取DisplayMetrics成员,首先初始化一个对象如下:
DisplayMetrics metrics =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics;
注:构造函数DisplayMetrics不需要传递任何参数;调用getWindowManager()之后,会取得现有Activity的Handle,此时,getDefaultDisplay()方法将取得的宽高维度存放于DisplayMetrics对象中,而取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”。

因为是个简单的效果,我就不上效果图啦~~~~~~~~~~~~~

.
.
.
.
.
其实我是不知道怎么上传gif图 哈哈

希望能帮助到你,谢谢浏览!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值