android中的热词搜索的实现

热词搜索的实现方法其实就是平常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;
    }


然后初始化热词的textview,代码如下:


    /*
     * 初始化搜索热词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;
    }


在activity的oncreate方法中进行调用,代码如下:


 @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 就可以了。


至此,便可以实现热词的动态创建功能,希望对大家的开发有所帮助,如有错误之处,希望大家给与提出。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值