UI控件

2017-04-27  本文已影响0人  tiger桂

RecyclerView

RecyclerView是一个更先进,更灵活的版本的ListView。

RecyclerView这个控件是一个可以装载大量的视图集合,并且可以非常效率的进行回收和滚动。当你list中的元素经常动态改变时可以使用RecyclerView控件。

RecyclerView非常容易使用,它提供了如下两个功能:

为每个条目位置提供了layout管理器(RecyclerView.setLayoutManager)

LinearLayoutManager

GridLayoutManager

StaggeredGridLayoutManager(加强的GridLayoutManager)

为每个条目设置了操作动画(RecyclerView.setItemAnimator)

XML 布局:

/layout

1

2

3

4

5

android:id="@+id/rv"

android:scrollbars="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

初始化RecyclerView参数,设置layoutManager和adapter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_recycler_view);

// introduce

tvIntro = (TextView) findViewById(R.id.tv_intro);

tvIntro.setText(R.string.RecyclerViewActivityIntro);

mRecyclerView = (RecyclerView) findViewById(R.id.rv);

// improve performance if you know that changes in content

// do not change the size of the RecyclerView

mRecyclerView.setHasFixedSize(true);

// use a linear layout manager

// 布局有三种

//     LinearLayoutManager

//     GridLayoutManager

//     StaggeredGridLayoutManager(加强的GridLayoutManager)

mLayoutManager =newLinearLayoutManager(this);

mRecyclerView.setLayoutManager(mLayoutManager);

// specify an adapter (see also next example)

initData();

mRecyclerViewAdapter =newRecyclerViewAdapter(mData);

mRecyclerView.setAdapter(mRecyclerViewAdapter);

}

创建adapter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47publicclassRecyclerViewAdapterextendsRecyclerView.Adapter {

privateString[] mData;

// Provide a reference to the type of views that you are using

// (custom viewholder)

publicclassViewHolderextendsRecyclerView.ViewHolder {

publicTextView mTextView;

publicViewHolder(View v) {

super(v);

mTextView = (TextView) v;

}

}

// Provide a suitable constructor (depends on the kind of dataset)

publicRecyclerViewAdapter(String[] data) {

mData = data;

}

// Create new views (invoked by the layout manager)

@Override

publicRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,intviewType) {

// create a new view

View v = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent,false);

ViewHolder vh =newViewHolder(v);

returnvh;

}

// Replace the contents of a view (invoked by the layout manager)

@Override

publicvoidonBindViewHolder(ViewHolder holder,intposition) {

// - get element from your dataset at this position

// - replace the contents of the view with that element

Log.d(TAG,"Element "+ position);

holder.mTextView.setText(mData[position]);

}

// Return the size of your dataset (invoked by the layout manager)

@Override

publicintgetItemCount() {

if(null!= mData) {

returnmData.length;

}else{

return0;

}

}

}

CardView

CardView继承于FrameLayout类。CardView能让你的布局统一的显示在卡片布局中。(需要导入 v7CardView support 库)

XML实现:

XML

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

xmlns:card_view="http://schemas.android.com/apk/res-auto"

... >

xmlns:card_view="http://schemas.android.com/apk/res-auto"

android:id="@+id/card_view"

android:layout_gravity="center"

android:layout_width="200dp"

android:layout_height="200dp"

card_view:cardCornerRadius="4dp">

android:id="@+id/info_text"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

Java Code实现:

Java

1

2

3

4// 设置曲率

mCardView.setRadius(progress);

// 设置高度 阴影

mCardView.setElevation(progress);

上一篇 下一篇

猜你喜欢

热点阅读