温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中怎么通过自定义view实现TopBar效果

发布时间:2021-06-29 15:11:27 来源:亿速云 阅读:172 作者:Leah 栏目:移动开发

这篇文章给大家介绍Android中怎么通过自定义view实现TopBar效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

布局文件

<?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:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.bwie.test.MainActivity">      <com.bwie.test.MyView      xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:lt="http://schemas.android.com/apk/res-auto"      android:id="@+id/titlebar"      android:layout_width="match_parent"      android:layout_height="60dp"      lt:leftButtonText="返回"      lt:leftButtonTextColor="@android:color/white"      lt:leftButtonTextSize="8sp"      lt:buttonBgColor="#4556ec"      lt:titleText="标题"      lt:titleColor="@android:color/white"      lt:titleSize="8sp"      lt:rightButtonText="完成"      lt:rightButtonTextColor="@android:color/white"      lt:rightButtonTextSize="8sp"      android:background="#47ea10"      android:padding="10sp"      >    </com.bwie.test.MyView>  </RelativeLayout>

自定义属性attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>  <resources>    <declare-styleable name="Titlebar">      <attr name="leftButtonText" format="string|reference"></attr>      <attr name="leftButtonTextColor" format="color|reference"></attr>      <attr name="leftButtonTextSize" format="dimension|reference"></attr>      <attr name="leftButtonImage" format="color|reference"></attr>      <attr name="buttonBgColor" format="color"/>        <attr name="titleText" format="string|reference"></attr>      <attr name="titleColor" format="color|reference"></attr>      <attr name="titleSize" format="dimension|reference"></attr>        <attr name="rightButtonText" format="string|reference"></attr>      <attr name="rightButtonTextColor" format="color|reference"></attr>      <attr name="rightButtonTextSize" format="dimension|reference"></attr>      <attr name="rightButtonImage" format="color|reference"></attr>        </declare-styleable>    </resources>

自定义View的Class类

public class MyView extends RelativeLayout{      private String mLeftButtonText;    private int mLeftButtonTextColor;    private float mLeftButtonSize;    private Drawable mLeftButtonImage;    private String mTitleButtonText;    private int mTitleButtonTextColor;    private float mTitleButtonSize;    private String mRightButtonText;    private int mRightButtonTextColor;    private float mRightButtonSize;    private Drawable mRightButtonImage;    private TextView mRightTextView;    private TextView titleTextView;    private ImageView mLeftButton;    private TextView mLeftTextView;    private ImageView mRightButton;    int buttonBgColor;    public MyView(Context context) {      this(context,null);    }      public MyView(Context context, AttributeSet attrs) {      this(context, attrs,0);      TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Titlebar);      buttonBgColor = typedArray.getColor(R.styleable.Titlebar_buttonBgColor,Color.BLUE);    //左侧的按钮      mLeftButtonText = typedArray.getString(R.styleable.Titlebar_leftButtonText);      mLeftButtonTextColor = typedArray.getColor(R.styleable.Titlebar_leftButtonTextColor, Color.GRAY);      mLeftButtonSize = typedArray.getDimension(R.styleable.Titlebar_leftButtonTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));      mLeftButtonImage = typedArray.getDrawable(R.styleable.Titlebar_leftButtonImage);  //中间的按钮      mTitleButtonText = typedArray.getString(R.styleable.Titlebar_titleText);      mTitleButtonTextColor = typedArray.getColor(R.styleable.Titlebar_titleColor, Color.GRAY);      mTitleButtonSize = typedArray.getDimension(R.styleable.Titlebar_titleSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));  //右侧的按钮      mRightButtonText = typedArray.getString(R.styleable.Titlebar_rightButtonText);      mRightButtonTextColor = typedArray.getColor(R.styleable.Titlebar_rightButtonTextColor, Color.GRAY);      mRightButtonSize = typedArray.getDimension(R.styleable.Titlebar_rightButtonTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));      mRightButtonImage = typedArray.getDrawable(R.styleable.Titlebar_rightButtonImage);        typedArray.recycle();//回收      /*调用方法*/      initView(context);    }      public MyView(Context context, AttributeSet attrs, int defStyleAttr) {      this(context, attrs, defStyleAttr,0);    }      public MyView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {      super(context, attrs, defStyleAttr, defStyleRes);    }    /*构建按钮*/    private void initView(Context context) {        if(mLeftButtonImage == null & mLeftButtonText != null){        // 当用户没有设置左侧按钮图片并设置了左侧的按钮文本属性时--添加左侧文本按钮        mLeftTextView = new TextView(context);        mLeftTextView.setText(mLeftButtonText);        mLeftTextView.setTextColor(mLeftButtonTextColor);        mLeftTextView.setTextSize(mLeftButtonSize);        mLeftTextView.setBackgroundColor(buttonBgColor);        RelativeLayout.LayoutParams leftParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);        leftParams.addRule(RelativeLayout.CENTER_VERTICAL);        addView(mLeftTextView, leftParams);      }else if(mLeftButtonImage != null){        // 添加左侧图片按钮        RelativeLayout.LayoutParams leftParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);        leftParams.addRule(RelativeLayout.CENTER_VERTICAL);        mLeftButton = new ImageView(context);        mLeftButton.setImageDrawable(mLeftButtonImage);        addView(mLeftButton, leftParams);      }        if(mTitleButtonText!=null){        // 添加中间标题        titleTextView = new TextView(context);        titleTextView.setText(mTitleButtonText);        titleTextView.setTextColor(mTitleButtonTextColor);        titleTextView.setTextSize(mTitleButtonSize);        RelativeLayout.LayoutParams titleTextViewParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        titleTextViewParams.addRule(RelativeLayout.CENTER_IN_PARENT);        addView(titleTextView,titleTextViewParams);      }        if(mRightButtonImage == null & mRightButtonText != null){        // 当用户没有设置右侧按钮图片并设置了左侧的按钮文本属性时--添加右侧文本按钮        mRightTextView = new TextView(context);        mRightTextView.setText(mRightButtonText);        mRightTextView.setTextColor(mRightButtonTextColor);         mRightTextView.setTextSize(mRightButtonSize);        mRightTextView.setBackgroundColor(buttonBgColor);        RelativeLayout.LayoutParams rightParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);        rightParams.addRule(RelativeLayout.CENTER_VERTICAL);        addView(mRightTextView,rightParams);      }else if(mRightButtonImage != null){        // 添加右侧图片按钮        RelativeLayout.LayoutParams rightParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);        rightParams.addRule(RelativeLayout.CENTER_VERTICAL);        mRightButton = new ImageView(context);        mRightButton.setImageDrawable(mRightButtonImage);        addView(mRightButton, rightParams);      }    }    /*监听事件*/    public interface OnButtonClickListener{      void onLeftClick();      void onRightClick();    }    /*点击事件*/    public void setOnButtonClickListener(final OnButtonClickListener onButtonClickListener) {      if(onButtonClickListener !=null){        if(mLeftTextView != null){          mLeftTextView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {              onButtonClickListener.onLeftClick();            }          });        }        /*按钮*/        if(mLeftButton != null){          mLeftButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {              onButtonClickListener.onLeftClick();            }          });        }        if(mRightTextView != null){          mRightTextView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {              onButtonClickListener.onRightClick();            }          });        }        /*按钮*/        if(mRightButton != null){          mRightButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {              onButtonClickListener.onRightClick();            }          });        }      }    }

Main方法的代码调用自定义的类和点击事件

public class MainActivity extends AppCompatActivity {      @Override    protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);        /*找到控件*/      MyView Myview = (MyView) findViewById(R.id.titlebar);      /*点击事件*/      Myview.setOnButtonClickListener(new MyView.OnButtonClickListener() {        @Override        public void onLeftClick() {          Toast.makeText(MainActivity.this,"左侧按钮被点击了",Toast.LENGTH_SHORT).show();        }          @Override        public void onRightClick() {          Toast.makeText(MainActivity.this,"右侧按钮被点击了",Toast.LENGTH_SHORT).show();        }      });      }  }

关于Android中怎么通过自定义view实现TopBar效果就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI