android 自定义通用标题

项目中往往几个界面使用同一类型的标题布局,如果每次都重新定义,不仅增加工作量,如果出现错误,进行修改,也会要修改很多界面,并且容易遗漏,出错,比较好的方法是定义一个通用的布局,并且封装布局上按钮之类的点击事件。
这里写图片描述
先简单介绍一下这个布局,左侧为一个按钮,中间为搜索对话框,点击弹出对话框,并且设置软键盘enter图标为搜索图标,代码中捕捉搜索事件,右侧为一个FrameLayout布局,放了一个ImageView和一个TextView,根据功能选择其中一个进行显示
title_with_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/id_top"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">


    <ImageView
        android:id="@+id/id_left"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="12dp"
        android:layout_weight="1"
        android:src="@mipmap/ic_launcher" />


    <EditText
        android:id="@+id/id_editTextSearch"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="12dp"
        android:layout_weight="3"
        android:imeOptions="actionSearch"
        android:singleLine="true"
        android:inputType="text"
        android:drawableLeft="@mipmap/ic_launcher"
        android:drawablePadding="10dp"
        android:hint="@string/title"
        android:textColor="#000000"
        android:textSize="15sp"
    />

    <FrameLayout
        android:id="@+id/id_right"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1">

        <ImageView
            android:id="@+id/id_rightImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:padding="12dp"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/id_rightText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:padding="12dp"
            android:textColor="#000000" />
    </FrameLayout>


</LinearLayout>

对应的自定义代码

/**
 * Created by Administrator on 2015/12/15 0015.
 * 包含搜索输入框的标题栏
 */
public class TitleWithEditText extends LinearLayout {
    EditText editTextSearch;//搜索框
    ImageView imageViewLeft;//左侧图片
    ImageView imageViewRight;//右侧图片
    TextView textViewRight;//右侧文本
    FrameLayout frameLayoutRight;
    private titleLayoutClick mListener;

    public TitleWithEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title_with_edittext, this);
        editTextSearch = (EditText) findViewById(R.id.id_editTextSearch);
        imageViewLeft = (ImageView) findViewById(R.id.id_left);
        imageViewRight = (ImageView) findViewById(R.id.id_rightImage);
        textViewRight = (TextView) findViewById(R.id.id_rightText);
        frameLayoutRight = (FrameLayout) findViewById(R.id.id_right);

        imageViewRight.setVisibility(View.INVISIBLE);
        textViewRight.setVisibility(View.INVISIBLE);

        imageViewLeft.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.leftViewClick();
                }
            }
        });
        frameLayoutRight.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.rightViewClick();
                }

            }
        });
        //设置弹出键盘输入完成图标为搜索,点击搜索事件
        editTextSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER))

                {
                    if (mListener != null) {
                        mListener.edittextDoSearch();
                    }
                    return true;

                }
                return false;
            }
        });

    }

    //设置右侧显示的控件,图片或文本,viewId 0 显示图标,viewId 1 显示文本
    public void setRightShow(int viewId) {
        imageViewRight.setVisibility(View.INVISIBLE);
        textViewRight.setVisibility(View.INVISIBLE);
        if (viewId == 0) {
            imageViewRight.setVisibility(View.VISIBLE);
        } else if (viewId == 1) {
            textViewRight.setVisibility(View.VISIBLE);
        }

    }

    public void setTitleLayoutListener(titleLayoutClick titleLayoutListener) {
        mListener = titleLayoutListener;
    }

    //设置右边文本内容
    public void setTextViewRightTitle(String title) {
        textViewRight.setText(title);
    }

    public interface titleLayoutClick {
        public void leftViewClick();//左图片点击

        public void rightViewClick();//右边点击

        public void edittextDoSearch();//搜索框搜索事件

    }
}

使用布局

 <xxx.UI.CustomTitles.TitleWithEditText
        android:id="@+id/id_titleLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@mipmap/top">

    </xxx.UI.CustomTitles.TitleWithEditText>
  titleWithEditText = (TitleWithEditText) findViewById(R.id.id_titleLayout);
        titleWithEditText.setRightShow(0);

        TitleWithEditText.titleLayoutClick titleLayoutClick = new TitleWithEditText.titleLayoutClick() {
            @Override
            public void leftViewClick() {
                PackageManager pm = getPackageManager();
                boolean hasACamera = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) ||
                        pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT) ||
                        Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD ||
                        Camera.getNumberOfCameras() > 0;
                if (!hasACamera) {//不存在照相机
                    T.showShort(getApplicationContext(), "没有找到照相设备");
                } else {
                    //打开扫描界面扫描条形码或二维码
                    Intent openCameraIntent = new Intent(MapActivity.this, CaptureActivity.class);
                    startActivityForResult(openCameraIntent, 0);
                }
            }

            @Override
            public void rightViewClick() {

            }

            @Override
            public void edittextDoSearch() {
                T.showShort(MapActivity.this,"进行搜索");
            }
        };
        titleWithEditText.setTitleLayoutListener(titleLayoutClick);

finish

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值