android自定义组件实现方法

本文实例讲述了android自定义组件实现方法。分享给大家供大家参考。具体如下:

atts.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TopBar"> <attr name="titleText" format="string"/> <attr name="titleTextSize" format="dimension"/> <attr name="titleTextColor" format="color"/> <attr name="leftText" format="string"/> <attr name="leftBackground" format="reference|color"/> <attr name="leftTextColor" format="color"/> <attr name="rightText" format="string"/> <attr name="rightBackground" format="reference|color"/> <attr name="rightTextColor" format="color"/> </declare-styleable> </resources>

TopBar.java:

package com.cd.administrator.mytopbar; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; /** * Created by Administrator on 2015/1/8. */ public class TopBar extends RelativeLayout{ private Button leftButton,rightButton; private TextView tvTitle; private int leftTextColor; private Drawable leftBackground; private String leftText; private int rightTextColor; private Drawable rightBackground; private String rightText; private int titleTextColor; private String titleText; private float titleTextSize; private LayoutParams leftParams,rightParams,titleParams; private topBarClickListener listener; public interface topBarClickListener{ public void leftClick(); public void rightClick(); } public void setOnTopBarClickListener(topBarClickListener listener){ this.listener = listener; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public TopBar(final Context context, AttributeSet attrs) { super(context, attrs); TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.TopBar); leftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor,0); leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground); leftText = ta.getString(R.styleable.TopBar_leftText); rightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor,0); rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground); rightText = ta.getString(R.styleable.TopBar_rightText); titleTextColor = ta.getColor(R.styleable.TopBar_titleTextColor,0); titleTextSize = ta.getDimension(R.styleable.TopBar_titleTextSize,0); titleText = ta.getString(R.styleable.TopBar_titleText); ta.recycle(); leftButton = new Button(context); rightButton = new Button(context); tvTitle = new TextView(context); leftButton.setTextColor(leftTextColor); leftButton.setBackground(leftBackground); leftButton.setText(leftText); rightButton.setTextColor(rightTextColor); rightButton.setBackground(rightBackground); rightButton.setText(rightText); tvTitle.setTextColor(titleTextColor); tvTitle.setTextSize(titleTextSize); tvTitle.setText(titleText); tvTitle.setGravity(Gravity.CENTER); setBackgroundColor(0xf59563); leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE); addView(leftButton,leftParams); rightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE); addView(rightButton,rightParams); titleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE); addView(tvTitle,titleParams); leftButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.leftClick(); } }); rightButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.rightClick(); } }); } }

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <com.cd.administrator.mytopbar.TopBar android:id="@+id/topBar" android:layout_width="match_parent" android:layout_height="40dp" custom:leftBackground="@drawable/blue" custom:leftText="Back" custom:leftTextColor="#ffffff" custom:rightBackground="@drawable/blue" custom:rightText="More" custom:rightTextColor="#ffffff" custom:titleTextColor="#121212" custom:titleTextSize="15sp" custom:titleText="自定义标题"> </com.cd.administrator.mytopbar.TopBar> </RelativeLayout>

MainActivity.java:

package com.cd.administrator.mytopbar; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TopBar topBar = (TopBar) findViewById(R.id.topBar); topBar.setOnTopBarClickListener(new TopBar.topBarClickListener() { @Override public void leftClick() { Toast.makeText(MainActivity.this, "cd--left", Toast.LENGTH_SHORT).show(); } @Override public void rightClick() { Toast.makeText(MainActivity.this,"cd--right",Toast.LENGTH_SHORT).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }

希望本文所述对大家的Android程序设计有所帮助。

时间: 2024-09-20 03:13:39

android自定义组件实现方法的相关文章

android自定义组件实现方法_Android

本文实例讲述了android自定义组件实现方法.分享给大家供大家参考.具体如下: atts.xml: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TopBar"> <attr name="titleText" format="string"/> <

Android 自定义组件成JAR包的实现方法_Android

Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理.             在项目开发过程中,我们难免会用到自己去制作自定义的VIEW控件,之后我们别的项目如果需要的话就直接将其复制到对应的项目中使用,虽说这么做是一个解决问题的方法,但毕竟不是很好. 原因是,当我们项目积累越来越多,会发现自定义的控件越来越多,而且这些自定义的控件都是可以重复利用的,这时我们可以想想,如果把这些自定义控件都封装成一个JAR包,然后用一个项目积累起来

Android自定义组件获取本地图片和相机拍照图片

iOS中有封装好的选择图片后长按出现动画删除效果,效果如下 而Android找了很久都没有找到有这样效果的第三方组件,最后懒得找了还是自己实现这效果吧 选择图片后还可对图片进行剪裁 当然,代码中还有很多不完善的地方,我接下来会继续完善这个组件的 已经上传到开源社区,欢迎大家来Star啊~ Demo源码:传送门 设计中的碰到的一些问题和解决思路 1.如何让加号图片显示在GridView最后面 首先在调用GridAdapter构造方法时就加载加号图片 /** * 图片适配器 * @param con

Android 自定义组件卫星菜单的实现

卫星菜单 ArcMenu 相信大家接触安卓,从新手到入门的过渡,就应该会了解到卫星菜单.抽屉.Xutils.Coolmenu.一些大神封装好的一些组件.这些组件在 Github 上面很容易搜得到,但是有时候打开会发现看不懂里面的代码,包括一些方法和函数 ..... 首先先上效果图: 实现效果 首先如果要想自定义组件 1.那么第一件事就是赋予自定义组件的属性,从效果图上看出,该组件可以存在屏幕的各个角落点,那么位置是其属性之一. 2.既然是卫星菜单,那么主按钮和其附属的小按钮之间的围绕半径也应该作

Android自定义组件ListPopWindow_Android

先看一下效果: 效果就是这样,看一下实现,其实也没多难,就是想开源出来供小伙伴们使用,如有不合理地方,希望大家多多指正. 1.自定义PopWindow 首先我们分析一下,这样的效果肯定是一个PopWindow嵌套着listview,而上面的title.和下面的cancel是两个文本框,实现起来也比较简单. 然后我们在PopWindow中声明两个接口,用来回调cancel和item的点击事件 public interface OnPopItemClickListener{ void onPopIt

Android TabHost组件使用方法详解_Android

最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下: main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" and

android自定义组件的简易实现

写这篇博客是为了复习之前在慕课上面有幸看到的自定义组件的实现,原理很简单,有三个步骤, 为自定义的组件做好声明:封装成具体的可以使用的组件类,并利用接口回调机制为其注册监听函数:想使用正常的组件的方式稍加修改后进行使用.是不是感觉思路很清晰啊,那么让我们一起来实现它吧. 1.做好声明,在新建的工程的value文件夹下创建一个名为atts.xml的文件,然后添加进自己将会使用到的"元素",需要注意的是declare-styleable 下的name属性,这个值尤其重要,这个和就是今后我们

Android自定义组件跟随自己手指主动画圆

本文实例为大家分享了Android实现跟随手指画圆的具体代码,供大家参考,具体内容如下 首先自己定义一个View子类: package com.example.androidtest0.myView; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Att

Android自定义Style实现方法_Android

styles.xml如下: [html] 复制代码 代码如下: <resources xmlns:android="http://schemas.android.com/apk/res/android">      <style name="AppBaseTheme" parent="android:Theme.Light">      </style>      <style name="Ap