学习简单的自定义控件
顶端导航栏的自定义实现
package Home.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; import android.view.Gravity; import androidx.annotation.RequiresApi; import androidx.appcompat.widget.TintTypedArray; import android.widget.Toolbar; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toolbar; import com.example.expressdelivery.R; /** * Created by Ivan on 15/9/28. */ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public class CnToolbar extends Toolbar { private LayoutInflater mInflater; private View mView; private TextView mTextTitle; private EditText mSearchView; private ImageButton mRightImageButton; @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public CnToolbar(Context context) { this(context,null); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public CnToolbar(Context context, AttributeSet attrs) { this(context, attrs, 0); } @SuppressLint("RestrictedApi") @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public CnToolbar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); setContentInsetsRelative(10,10); if(attrs !=null) { @SuppressLint("RestrictedApi") final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, R.styleable.CnToolbar, defStyleAttr, 0); @SuppressLint("RestrictedApi") final Drawable rightIcon = a.getDrawable(R.styleable.CnToolbar_rightButtonIcon); if (rightIcon != null) { //setNavigationIcon(navIcon); setRightButtonIcon(rightIcon); } @SuppressLint("RestrictedApi") boolean isShowSearchView = a.getBoolean(R.styleable.CnToolbar_isShowSearchView,false); if(isShowSearchView){ showSearchView(); hideTitleView(); } a.recycle(); } } private void initView() { if(mView == null) { mInflater = LayoutInflater.from(getContext()); mView = mInflater.inflate(R.layout.toolbar, null); mTextTitle = (TextView) mView.findViewById(R.id.toolbar_title); mSearchView = (EditText) mView.findViewById(R.id.toolbar_searchview); mRightImageButton = (ImageButton) mView.findViewById(R.id.toolbar_rightButton); LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL); addView(mView, lp); } } public void setRightButtonIcon(Drawable icon){ if(mRightImageButton !=null){ mRightImageButton.setImageDrawable(icon); mRightImageButton.setVisibility(VISIBLE); } } public void setRightButtonOnClickListener(OnClickListener li){ mRightImageButton.setOnClickListener(li); } @Override public void setTitle(int resId) { setTitle(getContext().getText(resId)); } @Override public void setTitle(CharSequence title) { initView(); if(mTextTitle !=null) { mTextTitle.setText(title); showTitleView(); } } public void showSearchView(){ if(mSearchView !=null) mSearchView.setVisibility(VISIBLE); } public void hideSearchView(){ if(mSearchView !=null) mSearchView.setVisibility(GONE); } public void showTitleView(){ if(mTextTitle !=null) mTextTitle.setVisibility(VISIBLE); } public void hideTitleView() { if (mTextTitle != null) mTextTitle.setVisibility(GONE); } // // private void ensureRightButtonView() { // if (mRightImageButton == null) { // mRightImageButton = new ImageButton(getContext(), null, // android.support.v7.appcompat.R.attr.toolbarNavigationButtonStyle); // final LayoutParams lp = generateDefaultLayoutParams(); // lp.gravity = GravityCompat.START | (Gravity.VERTICAL_GRAVITY_MASK); // mRightImageButton.setLayoutParams(lp); // } // } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/toolbar_searchview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_centerVertical="true" android:gravity="center" android:drawableLeft="@drawable/icon_search" style="@style/search_view" android:hint="请输入搜索内容" android:layout_marginRight="60dp" android:visibility="gone" /> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" android:gravity="center" android:textColor="@color/white" android:textSize="20sp" android:visibility="gone" /> <ImageButton android:id="@+id/toolbar_rightButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:visibility="gone" style="@android:style/Widget.Material.Toolbar.Button.Navigation" tools:targetApi="lollipop" /> </RelativeLayout>
效果