android 自定义通用标题

项目中往往几个界面使用同一类型的标题布局,如果每次都重新定义,不仅增加工作量,如果出现错误,进行修改,也会要修改很多界面,并且容易遗漏,出错,比较好的方法是定义一个通用的布局,并且封装布局上按钮之类的点击事件。
android 自定义通用标题_第1张图片
先简单介绍一下这个布局,左侧为一个按钮,中间为搜索对话框,点击弹出对话框,并且设置软键盘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

你可能感兴趣的:(自定义标题布局)