using System;
using System.Threading.Tasks;
namespace Shared.Phone.UserCenter
{
///
/// 制作一个根据键值进行搜索的控件
/// 添加控件后,请调用LoadEvent()函数进行回调函数的绑定
///
public class SearchTextControl : FrameLayout
{
#region ■ 变量声明__________________________
///
/// 为了对应子线程
///
private string m_Text = string.Empty;
///
/// 文本值
///
/// The text.
public string Text
{
get
{
return m_Text;
}
set
{
this.m_Text = value;
txtSearch.Text = this.m_Text;
}
}
///
/// 搜索控件
///
private TextInputControl txtSearch = null;
///
/// 回调函数
///
private Action actionMethod = null;
///
/// 没有输入键值的显示文本
///
private string tipText = string.Empty;
#endregion
#region ■ 初始化____________________________
///
/// 制作一个根据键值进行搜索的控件
/// 添加控件到父控件后,请调用BindEvent()函数进行回调函数的绑定
///
/// 没有输入键值的显示文本
/// 宽度
/// 高度
public SearchTextControl(string i_tipText, int width = 965, int height = 104)
{
this.tipText = i_tipText;
//桌布控件
this.Width = Application.GetRealWidth(width);
this.Height = Application.GetRealHeight(height);
this.Gravity = Gravity.CenterHorizontal;
this.Radius = (uint)Application.GetRealHeight(17);
this.BackgroundColor = 0xfff8f7f7;
}
///
/// 控件初始化
///
/// 回调函数:值是输入的关键字
private void InitControl(Action action)
{
//搜索图标
var btnIcon = new IconViewControl(52);
btnIcon.Gravity = Gravity.CenterVertical;
btnIcon.X = ControlCommonResourse.XXLeft;
btnIcon.UnSelectedImagePath = "Item/Search.png";
this.AddChidren(btnIcon);
//取消
var btnCancel = new IconViewControl(58);
btnCancel.X = this.Width - ControlCommonResourse.XXLeft / 2 - btnCancel.IconSize;
btnCancel.UnSelectedImagePath = "Item/CancelIcon.png";
btnCancel.Gravity = Gravity.CenterVertical;
this.AddChidren(btnCancel);
btnCancel.ButtonClickEvent += (sender, e) =>
{
this.Text = string.Empty;
};
//输入文本
int textWidth = btnCancel.X - Application.GetRealWidth(132 + 10);
txtSearch = new TextInputControl(textWidth, Application.GetRealHeight(49), false);
txtSearch.X = Application.GetRealWidth(132);
txtSearch.PlaceholderText = this.tipText;
txtSearch.Gravity = Gravity.CenterVertical;
txtSearch.TextSize = 12;
txtSearch.PlaceholderTextColor = UserCenterColor.Current.TextGrayColor1;
this.AddChidren(txtSearch);
string oldText = string.Empty;
//值改变事件
txtSearch.TextChangeEventHandler += (sender, e) =>
{
this.nextSearchKeys = txtSearch.Text.Trim();
this.m_Text = this.nextSearchKeys;
if (oldText == this.nextSearchKeys)
{
//输入的值一样
return;
}
oldText = this.nextSearchKeys;
//允许执行回调函数
this.isCanSearch = true;
};
}
#endregion
#region ■ 绑定事件__________________________
///
/// 绑定事件
///
/// 回调函数:值是输入的关键字
public void BindEvent(Action action)
{
this.actionMethod = action;
//控件初始化
this.InitControl(action);
//打开搜索键值的线程
this.StartSearchKeysThead();
}
#endregion
#region ■ 开启线程__________________________
///
/// 能否执行搜索
///
private bool isCanSearch = false;
///
/// 下一个搜索键值
///
private string nextSearchKeys = string.Empty;
///
/// 打开搜索键值的线程
///
private void StartSearchKeysThead()
{
HdlThreadLogic.Current.RunThread(() =>
{
while (this.Parent != null)
{
//根据逻辑,不能够搜索的话,等待
if (this.isCanSearch == false)
{
System.Threading.Thread.Sleep(1000);
continue;
}
//获取当前瞬间的键值
string nowSearchKeys = nextSearchKeys;
//根据搜索键值,调用回调函数
this.actionMethod(nowSearchKeys);
//处理完毕后,如果当前的检索键值与下一个检索键值一样的话
//说明用户已经不再输入键值了,这个时候,停止搜索
if (nowSearchKeys == nextSearchKeys)
{
this.isCanSearch = false;
}
//如果当前的检索键值与下一个检索键值不一样的话
//那就说明,用户再次输入了键值,这个时候,让线程继续跑下去
}
});
}
#endregion
#region ■ 控件摧毁__________________________
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
actionMethod = null;
base.RemoveFromParent();
}
#endregion
}
}