自定义组合控件(Android)
来源:互联网 发布:紫竹调网络歌手 编辑:程序博客网 时间:2024/06/05 01:00
/** * 自定义标题栏 */public class TopBar extends RelativeLayout { private String mLeftText; private String mRightText; private String mTitle; private int mLeftTextColor; private int mRightTextColor; private int mTitleColor; private Drawable mLeftDrawable; private Drawable mRightDrawable; private float mTitleSize; private Button mLeftButton; private Button mRightButton; private TextView mTitleView; private LayoutParams mLeftParams; private LayoutParams mRightParams; private LayoutParams mTitleParams; private TopBarClickListener mTopBarClickListener; private static final int BUTTON_LEFT = 0; public static final int BUTTON_RIGHT = 1; public TopBar(Context context) { super(context, null); } public TopBar(Context context, AttributeSet attrs) { super(context, attrs); if (attrs != null) { //通过这个方法,将你在attrs.xml中定义的declare-styleable的所有属性存储到TypedArray中。 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar); /** * 左侧按钮的属性 */ mLeftText = ta.getString(R.styleable.TopBar_leftText); mLeftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, Color.BLACK); mLeftDrawable = ta.getDrawable(R.styleable.TopBar_leftBackground); /** * 右侧按钮的属性 */ mRightText = ta.getString(R.styleable.TopBar_rightText); mRightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, Color.BLACK); mRightDrawable = ta.getDrawable(R.styleable.TopBar_rightBackground); /** * 标题的属性 */ mTitle = ta.getString(R.styleable.TopBar_title1); mTitleColor = ta.getColor(R.styleable.TopBar_titleTextColor1,Color.BLACK); mTitleSize = ta.getDimension(R.styleable.TopBar_titleTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 14, getResources().getDisplayMetrics())); ta.recycle(); } initView(context); } public void setTopBarClickListener(TopBarClickListener clickListener) { mTopBarClickListener = clickListener; } /** * 初始化视图 */ private void initView(Context context) { mLeftButton = new Button(context); mRightButton = new Button(context); mTitleView = new TextView(context); mLeftButton.setTextColor(mLeftTextColor); mLeftButton.setText(mLeftText); mLeftButton.setBackground(mLeftDrawable); mRightButton.setText(mRightText); mRightButton.setTextColor(mRightTextColor); mRightButton.setBackground(mRightDrawable); mTitleView.setText(mTitle); mTitleView.setTextColor(mTitleColor); mTitleView.setTextSize(mTitleSize); mTitleView.setGravity(Gravity.CENTER); //为组件元素设置相应的布局元素 mLeftParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mLeftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE); addView(mLeftButton, mLeftParams); mRightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mRightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE); addView(mRightButton, mRightParams); mTitleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mTitleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE); addView(mTitleView, mTitleParams); mLeftButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mTopBarClickListener != null) { mTopBarClickListener.leftClick(); } } }); mRightButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mTopBarClickListener != null) { mTopBarClickListener.rightClick(); } } }); } /** * 设置按钮是否显示 * @param id * @param flag */ private void setButtonVisable(int id,boolean flag){ if(flag){ if(id==BUTTON_LEFT){ mLeftButton.setVisibility(View.VISIBLE); }else{ mRightButton.setVisibility(View.VISIBLE); } }else{ if(id==BUTTON_LEFT){ mLeftButton.setVisibility(View.GONE); }else{ mRightButton.setVisibility(View.GONE); } } } public interface TopBarClickListener { //左按钮点击回掉 void leftClick(); //右按钮点击回调 void rightClick(); }}public class MainActivity extends AppCompatActivity implements TopBar.TopBarClickListener { private TopBar mTopBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_vertical_scroll); /* mTopBar = ((TopBar) findViewById(R.id.top_bar)); mTopBar.setTopBarClickListener(this);*/ } @Override public void leftClick() { Toast.makeText(getApplicationContext(),"left",Toast.LENGTH_SHORT).show(); } @Override public void rightClick() { Toast.makeText(getApplicationContext(),"right",Toast.LENGTH_SHORT).show(); }}attrs里边<resources> <declare-styleable name="TopBar"> <attr name="title1" format="string"/> <attr name="titleTextSize" format="dimension"/> <attr name="titleTextColor1" format="color"/> <attr name="leftTextColor" format="color"/> <attr name="leftBackground" format="reference|color"/> <attr name="leftText" format="string"/> <attr name="rightTextColor" format="color"/> <attr name="rightBackground" format="reference|color"/> <attr name="rightText" format="string"/> </declare-styleable></resources>xml<com.example.mdw.scrollertest.TopBar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/top_bar" android:layout_width="match_parent" android:layout_height="48dp" android:orientation="vertical" app:leftTextColor="#Fff" app:leftText="BACK" app:leftBackground="@color/colorAccent" app:title1="自定义标题" app:titleTextColor1="#000" app:titleTextSize="12sp" app:rightText="MORE" app:rightBackground="@color/colorAccent" app:rightTextColor="#fff" />
阅读全文
0 0
- 自定义组合控件(Android)
- Android自定义控件(二)组合控件
- Android--自定义控件(组合系统控件)
- Android自定义组合控件
- android自定义组合控件
- Android自定义组合控件
- android组合自定义控件
- android 自定义组合控件
- android 自定义组合控件
- android 自定义组合控件
- Android自定义组合控件
- android自定义组合控件
- Android 自定义组合控件
- android自定义组合控件
- android 自定义组合控件
- android 自定义组合控件
- android 自定义组合控件
- Android自定义组合控件
- 顶层const和底层const
- QQ第三方登录
- 创建计划任务
- bzoj 3396: [Usaco2009 Jan]Total flow 水流 网络流
- HASH算法
- 自定义组合控件(Android)
- 签名、验签
- java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制
- 125. Valid Palindrome(回文)
- RSA加密原理
- 计算机编程基础篇笔记 (一)---面对对象和面对过程
- spring cloud 与 docker-compose构建微服务
- 20170904心情总结
- 数字图像处理中的gradient descent (梯度下降算法)应用浅谈