在Titanium android tableview上切换搜索栏

时间:2014-01-03 07:47:01

标签: android titanium tableview searchbar

我有一个带有搜索栏的桌面视图

var tv = Titanium.UI.createTableView ({
            data: official_list,
            filterAttribute: 'title',
            backgroundColor : '#fff',
            search: search,
            searchHidden:false,
            top: '50dp'
        });

我希望最初隐藏搜索栏,仅在按下搜索按钮时显示。我正在使用以下代码

searchButton.addEventListener('click', function(_e) {
        search.visible = !search.visible;
        if(search.visible) {
            search.focus();
            self.softKeyboardOnFocus = 0;
        }
        else {
            Ti.UI.Android.hideSoftKeyboard();
        }
    });

我遇到的问题是,即使搜索被隐藏,搜索栏仍然留有空白区域。

我尝试设置了tableview的坐标,但是它会覆盖导航栏并且空白区域仍然存在。无论如何,我可以切换搜索栏(通过删除空格?)。

请帮忙!

2 个答案:

答案 0 :(得分:1)

我通过创建2个searchBar并使tableview坐标中的searchBar超出范围来解决了这个问题。附加到tableview的搜索栏是1dp。

var search = Titanium.UI.createSearchBar({
        barColor:'#000', 
        showCancel:false,
        top: -50,
        height:'45dp',          
        hidden: true,
        visible: false,   
        softKeyboardOnFocus : Titanium.UI.Android.SOFT_KEYBOARD_DEFAULT_ON_FOCUS     
    }); 

var search_table = Titanium.UI.createSearchBar({
        barColor:'#000', 
        showCancel:false,
        height:'1dp',           
        hidden: true,
        visible: false,   
    });     

现在我可以为searchBar(搜索)设置动画。

    search.visible = !search.visible;
            if(search.visible) {
                search.focus();
                self.softKeyboardOnFocus = 0;
                search.animate({
                     top: '50dp',
                     duration : 500,
                     delay : 0,  
                     curve: Titanium.UI.ANIMATION_CURVE_EASE_IN                  
                });
                tv.animate({
                     top: '90dp',
                     duration : 500,
                     delay : 0,                  
                     curve: Titanium.UI.ANIMATION_CURVE_EASE_IN
                });
            }
            else {
                Ti.UI.Android.hideSoftKeyboard();
                tv.animate({
                     top: '50dp',
                     duration : 500,
                     delay : 0,                  
                     curve: Titanium.UI.ANIMATION_CURVE_EASE_OUT
                });
            }
    });

并将值从searchBar传递给search_table(更好的方法是为每个搜索写入查询但我有7个以上,而是选择将值传递给tableview.search)

    search.addEventListener('change', function(e) {
        search_table.value = e.value;
    });

答案 1 :(得分:0)

我认为您的解决方案不起作用,因为tableview是窗口的直接子项。

如果将tableview包含在另一个视图中,然后在封闭视图中为tableview设置动画以隐藏搜索栏,则它应该有效。