在开发中我们有时候需要动态显示一些菜单组件(同一类型),因为组件不是很多,可是呢,如果一排全部显示出来又显得太挤,所以我们就会想着可以让用户可以滑动,而在界面上显示固定个数的菜单组件,那么如何来做呢?看下面代码
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图 哈哈
希望能帮助到你,谢谢浏览!