一個簡單的模擬歌曲分類的佈局
阿新 • • 發佈:2019-01-29
模擬了一個電臺分類的選單。
這個挺簡單的。就是根據資料控制控制元件的位置就行了。
資料來源就是一個二維的陣列
private List<List<ClassifyBean>> lists = new ArrayList<List<ClassifyBean>>();
然後第一個格子要大的佔兩行。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
for (int i = 0; i < lists.size(); ++i) {
List<Button> tempListBt = new ArrayList<Button>();
RelativeLayout rl = new RelativeLayout(getContext());
LayoutParams rlParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
rlParams.topMargin = 9 ;
//控制控制元件放在哪裡
int leftMarin = 0;
int topMargin = 0;
for (int j = 0; j < lists.get(i).size(); ++j) {
Button bt = new Button(getContext());
bt.setBackgroundResource(R.drawable.click_border_selector);
bt.setId(View.generateViewId());
bt.setTextColor(getColor(R.color.white));
final ClassifyBean cb = lists.get(i).get(j);
String text = cb.getName();
bt.setText(text);
tempListBt.add(bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(clickInter != null){
clickInter.clickClassify(cb);
}
}
});
if(j == 0){
//第一個,大塊的
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams(
gridWidth, gridWidth);
btParams.leftMargin = leftMarin;
btParams.topMargin = topMargin;
bt.setLayoutParams(btParams);
leftMarin += gridWidth;
}
else if(leftMarin >= width){
//換行
topMargin += gridWidth / 2 ;
if (j == 4) {
// 第二行
leftMarin = gridWidth;
} else {
// 超過第二行了
leftMarin = 0;
}
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams(
gridWidth, gridWidth / 2);
btParams.leftMargin = leftMarin;
btParams.topMargin = topMargin;
bt.setLayoutParams(btParams);
leftMarin += gridWidth;
}
else{
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams(
gridWidth, gridWidth / 2);
btParams.leftMargin = leftMarin;
btParams.topMargin = topMargin;
bt.setLayoutParams(btParams);
leftMarin += gridWidth;
}
rl.addView(bt);
}
listBt.add(tempListBt);
this.addView(rl, rlParams);
}
}
主要就是控制以下onlayout的佈局就可以了。
呼叫的:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<sudoku.myself.xhc.com.myapplication.ClassifyView
android:id="@+id/classify_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</ScrollView>
外面之所以有ScrollView,是因為很有可能會超出螢幕。
控制元件的位置就是用margin來控制的。好了。到這裡。
習大大說要早點休息
加好友: