热词搜索的实现方法其实就是平常SDK项目中view的实现方法,根据实际的需求新建出相应个数的textview。
首先通过createTextView方法实现textview的创建,代码如下:
/*
* 创建一新的热词View
*/
private TextView createTextView( String text) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.leftMargin = MARGIN_LEFT_RIGHT;
lp.rightMargin = MARGIN_LEFT_RIGHT;
lp.topMargin = MARGIN_TOP_BOTTOM;
lp.bottomMargin = MARGIN_TOP_BOTTOM;
TextView view = new TextView(getApplicationContext());
view.setText(text);
view.setLayoutParams(lp);
view.setGravity(Gravity.CENTER_VERTICAL);
view.setPadding(PADING_LEFT_RIGHT, PADING_TOP_BOTTOM, PADING_LEFT_RIGHT, PADING_TOP_BOTTOM);
view.setFocusableInTouchMode(false);
view.setGravity(Gravity.CENTER);
return view;
}
/*
* 初始化搜索热词VIew
*/
private void initSearchKeywordsView(ArrayList<String> keywords) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
// the display screen width
int displayWidth = getWindowManager().getDefaultDisplay().getWidth();
float rowWidth = 0f;
LinearLayout rowLayout = null;
for (int i = 0, length = keywords.size(); i < length; i++) {
String text = keywords.get(i);
TextView keywordView = createTextView(i, text);
float textWidth = keywordView.getPaint().measureText(text) + PADING_LEFT_RIGHT * 2
+ MARGIN_LEFT_RIGHT * 2;
rowWidth += textWidth;
if (rowLayout == null || rowWidth > displayWidth) {
// 创建一个新的横向布局 或者 子View超过屏幕宽度,折行显示
rowWidth = textWidth;
rowLayout = getHorizontalLinearLayout(lp);
mKeywordsLayout.addView(rowLayout);
}
rowLayout.addView(keywordView);
}
}
/*
* 生成新的水平方向的LinearLayout
*/
private LinearLayout getHorizontalLinearLayout(LayoutParams lp) {
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setLayoutParams(lp);
layout.setGravity(Gravity.CENTER);
return layout;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mList = new ArrayList<String>();
for(int i = 0;i<10;i++){
mList.add("list :" + i);
}
mKeywordsLayout = (LinearLayout) findViewById(R.id.tab_content_linearLayout);
initSearchKeywordsView(mList);
}
// 定义TextView的Padding属性
private static final int PADING_TOP_BOTTOM = 15;
private static final int PADING_LEFT_RIGHT = 20;
// 定义TextView的Margin属性
private static final int MARGIN_LEFT_RIGHT = 15;
private static final int MARGIN_TOP_BOTTOM = 20;
private ArrayList<String> mList;
XML文件中只需在需要添加热词显示区域加一个 LinearLayout 就可以了。
至此,便可以实现热词的动态创建功能,希望对大家的开发有所帮助,如有错误之处,希望大家给与提出。