using System;
using Shared.Phone.UserCenter;
namespace Shared.Phone.CommonInfoLib
{
public class SearchText : 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 string nextSearchKeys = string.Empty;
///
/// 能否执行搜索
///
private bool isCanSearch = false;
///
/// 没有输入键值的显示文本
///
private string tipText = string.Empty;
///
/// 回调函数
///
private Action actionMethod = null;
#endregion
#region 初始化
///
/// 制作一个根据键值进行搜索的控件
/// 添加控件到父控件后,请调用BindEvent()函数进行回调函数的绑定
///
/// 没有输入键值的显示文本
/// 宽度
/// 高度
public SearchText(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 = UserCenter.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;
};
}
#region 绑定事件
///
/// 绑定事件
///
/// 回调函数:值是输入的关键字
public void BindEvent(Action action)
{
this.actionMethod = action;
//控件初始化
this.InitControl(action);
//打开搜索键值的线程
this.StartSearchKeysThead();
}
#endregion 开启线程
///
/// 打开搜索键值的线程
///
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
#region 显示图标的控件
///
/// 做成一个显示图标的控件(需要手动开启点击状态)
///
public class IconViewControl : IconControlCommon
{
///
/// 图标大小
///
public int IconSize = 0;
///
/// 做成一个显示图标的控件(需要手动开启点击状态)
///
/// 大小
/// 是否计算真实值
public IconViewControl(int size = 110, bool real = true)
{
this.InitAvgSize(size, size, real);
this.IconSize = size;
if (real == true)
{
this.IconSize = Application.GetMinRealAverage(size);
}
}
}
#endregion
}
}