xamarin android下SearchView自定义样式

anroid下SearchView样式个人感觉很土,这边将它改成类iOS风格。包括自定义图标,SearchView中EditText的下划线、边框及文本样式处理.

1、添加render,这边由pcl过来,故绑定的是SearchBar,可自定义。

[assembly: ExportRenderer(typeof(SearchBar), typeof(SearchBarRenderer_Droid))]
namespace StoneApp.Droid.Renderers
{
    public class SearchBarRenderer_Droid : SearchBarRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
        {
            base.OnElementChanged(e);
            //读取为SearchView
            var sv = (SearchView)Control;
        }
    }
}

2、icon替换

//search_mag_icon为android中默认icon的id
int svIconId = Context.Resources.GetIdentifier("android:id/search_mag_icon", null, null);
            var icon = sv.FindViewById(svIconId);
            if (icon != null)
            {
                //读取为ImageView
                var iv = (icon as ImageView);
                //替换
                iv.SetImageResource(Resource.Drawable.searchicon);
                //通过padding控制图片大小
                iv.SetPadding(12, 12, 12, 12);
            }

3、搜索边框处理

//search_edit_frame为编辑区域id,实际上icon也包括其中
var frameId = Context.Resources.GetIdentifier("android:id/search_edit_frame", null, null);
            var frame = sv.FindViewById(frameId);
            if (frame != null)
            {
                var fv = (frame as Android.Views.View);
                //读取resource下的自定义shape的xml文件,通过背景设置边框
                fv.SetBackgroundResource(Resource.Drawable.search_border);
            }
shape配置信息:

<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="#ffffff"></solid>
  <!--边框圆角设置-->
  <corners
    android:topLeftRadius="3dp"
    android:topRightRadius="3dp"
    android:bottomLeftRadius="3dp"
    android:bottomRightRadius="3dp"
    ></corners>
  <!--padding-->
  <padding android:left="1dip" android:top="1dip" android:right="1dip" android:bottom="1dip"></padding>
  <!--边框颜色-->
  <stroke android:width="1dip" android:color="#7cb0d9" ></stroke>
</shape>

4、字体设置

//search_src_text为android默认输入文本id
var editTextId = Context.Resources.GetIdentifier("android:id/search_src_text", null, null);
            var editText = sv.FindViewById(editTextId);
            if(editText != null)
            {
                var ev = (editText as EditText);
                //字体颜色
                ev.SetTextColor(Android.Graphics.Color.ParseColor("#999999"));
                //字体大小
                ev.SetTextSize(Android.Util.ComplexUnitType.Dip, 13);                
            }

5、移除默认下划线

var plateId = Context.Resources.GetIdentifier("android:id/search_plate", null, null);
            var plate = sv.FindViewById(plateId);
            if(plate != null)
            {
                //将背景色设为白色与整个搜索框的背景色相同
                (plate as Android.Views.View).SetBackgroundColor(Android.Graphics.Color.ParseColor("#ffffff"));
            }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值