1. 程式人生 > >HorizontalScrollView動態新增元件,限制一頁的個數

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();
            }
        });
    }
}

DisplayMetrics用來可以獲取螢幕引數
Andorid.util包下的DisplayMetrics類提供了一種關於顯示的通用資訊,如顯示大小,解析度和字型。
為了獲取DisplayMetrics成員,首先初始化一個物件如下:
DisplayMetrics metrics =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics;
注:建構函式DisplayMetrics不需要傳遞任何引數;呼叫getWindowManager()之後,會取得現有Activity的Handle,此時,getDefaultDisplay()方法將取得的寬高維度存放於DisplayMetrics物件中,而取得的寬高維度是以畫素為單位(Pixel),“畫素”所指的是“絕對畫素”而非“相對畫素”。

因為是個簡單的效果,我就不上效果圖啦~~~~~~~~~~~~~

.
.
.
.
.
其實我是不知道怎麼上傳gif圖 哈哈

希望能幫助到你,謝謝瀏覽!